我目前正在研究一些数据结构,并且遇到了一些存储在二叉树中的数据,但我并不完全确定解析它的最佳方法。

本质上,数据是这样存储的:

Structure 1:
  LeftChild: 0xaddress
    Structure 2:
      LeftChild: 0xaddress
        Structure 3:
         LeftChild: 0xaddress
          ........
         RightChild: 0xaddress
          Structure 4:
            LeftChild: 0xaddress
            RightChild: 0xaddress
      RightChild: 0xaddress
  RightChild: 0xaddress


现在显然很难对二叉树进行文字说明,因此希望我上面的较差尝试对此有所解释。从本质上讲,所有这些都从一个结构开始,该结构具有左右树条目,每个树条目依次具有左右树,最终其中一个树将耗尽节点,然后继续树的下一个分支。

我不完全确定解决此问题的最佳方法。

尽管我的第一个方法是通过使用while循环来继续跟踪树节点,但是要跟踪它似乎有些头疼。

我知道Java具有二叉树实现,但是我不知道是否可以将它们用于此类工作。我从未尝试过使用它们,所以我可能是错的。

如果有人对如何解决此问题有任何意见或建议,我将不胜感激。

谢谢!

最佳答案

一种建议:如果树太深,则应避免使用基于递归的解决方案。那是因为您可能会遇到堆栈溢出问题。

要处理这种情况,可以利用堆栈。

以下伪代码遍历所有二叉树节点,而无需递归。

visitNodes(root)
    add the root on the stack

    while the stack is not empty
        nodeToBeProcessed <- pop the top node from the stack

        process nodeToBeProcessed

        if nodeToBeProcessed has a left child
            add the left child on the stack

        if nodeToBeprocessed has a right child
            add the right child on the stack


注意:pop操作返回并从堆栈中删除顶部节点。

注2:如果深度不是问题,那么基于递归的解决方案通常会更简单。

关于java - Java解析二叉树结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18087275/

10-12 04:09