Java非二叉树前序遍历

标签 java tree

我在遍历非二叉树并输出前序枚举时遇到一些问题。

我当前的代码是:

  public String GetPreOrder(ADS2TreeNode root, String res)
  {        
      res += data;
      if (numberOfChildren != 0)
      {
          for (int i = 0; i < numberOfChildren; i++)
          {
              res += "," + children[i];
          }            
      }      
   return res;              
  }


  public String GetPreOrder()
  {  
      String res = "";
      return root.GetPreOrder(root, res);
  }

基于“(B(E(K),F))”的测试数据 它输出 B,E(K),F 但是它应该输出 B、E、K、F

我相信这是因为它只是打印存储 E 子代的数组而不是单独访问它们?但是我不确定如何做到这一点。

有人能解释一下为什么会发生这种情况以及如何解决这个问题吗?

#

我现在遇到以下代码问题:

 public String GetPreOrder(ADS2TreeNode root, String res)
  {    
      if (root.numberOfChildren == 0)
      {
          res += root.data;
          root = root.parent;
      }
      else
      {


      for (int i = 0; i < root.numberOfChildren; i++)
          {
              res += root.data + ',';
              root = root.getChild(i);
              res = GetPreOrder(root, res);
          }

       }          
        return res;     
  }

在调试它时,它会按应有的方式循环遍历每个子树,但是它并没有完全到达树的末尾 - 我花了很长时间试图通过调试找出它,但我似乎无法理解为什么.

任何人都可以看到我的代码中的错误或我缺少的内容吗?

最佳答案

假设有一个函数pre-order-traversal(tree),它会执行以下操作:

  1. 访问根并显示其值/内容等。
  2. 通过递归调用 pre-order-traversal(tree) 函数来访问第一个子树。
  3. 通过递归调用 pre-order-traversal(tree) 继续从左到右处理所有其他子树。

您的代码不会遍历子树,而仅(隐式)调用其 toString() 方法,该方法显示给定的子树及其在括号中的子树。

因此,解决方案是对子级递归调用 GetPreOrder(...),因为它们也是树。

出现第二个问题是因为您将 root 重置为第一个 child 。因此,在 for 循环的第二次迭代中,不使用真正的根,而是使用第一个子树的根。只需不要重复使用参数 root 并使用局部变量即可。

res += root.data + ',';
for (int i = 0; i < numberOfChildren; i++)
{
    ADS2TreeNode child = root.getChild(i);
    res += GetPreOrder(child, res);
}

如果您能够以某种方式从问题的第一部分访问数组,则可以使用更好的 for-each-loop。

res += root.data + ',';
for(ADS2TreeNode child : children) {
    res += GetPreOrder(child, res);
}

关于Java非二叉树前序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27471846/

相关文章:

java - 为什么枚举在 java.utils 中被转换为 ArrayList 而不是 List?

java - 如何在java代码中检查连接后oracle数据库版本

创建二叉搜索树而不更新指针

java - 在 GWT-Openlayers 中显示 WMS 图层

java - 在这种情况下,表示树的最佳方式是什么?

java - 运行代码时出错,我尝试了 MultidexEnabled 但没有成功

sql - Ruby 中的树数据结构持久化

java - 排序 "plain-list-tree-structure"的算法

c++ - 修改 STL 列表中的元素 - C++

Javascript - 从树中递归删除某种类型的节点,但重新附加并传播符合条件的子节点