java - 遍历一棵树,但访问的每个节点都应该访问下面的每个节点

标签 java algorithm recursion

我正在遍历一棵树,这很容易,而且我知道该怎么做。但是,我想在每次迭代时访问当前节点下的每个节点。我不确定我是否清楚,所以我将尝试说明这一点:

        A
      /   \
     B     C
    / \   / \
   D   E F   G

第 1 次迭代:节点是 A:访问 B、C、D、E、F、G 第 2 次迭代:节点为 B:访问 D、E 第 2 次迭代:节点为 D:访问 F、G

我试着把它写成一个正常的遍历:

    public static void addCodes(Message root)
    {
         if (root.getLeftChild() != null){
               root.getLeftChild().setCode(root.getLeftChild().getCode() + "0");
               addCodes(root.getLeftChild());
         }
         if (root.getRightChild() != null) {
               root.getRightChild().setCode(root.getRightChild().getCode() + "1");
               addCodes(root.getRightChild());

         }
    }

但这显然行不通。每个节点被访问一次。我明白为什么,我只是不知道如何解决它。如果这是迭代的,它将是嵌套循环。这个的递归等价物是什么?

最佳答案

我想通了。

public static void addCodes(Message root)
{
     if (root.getLeftChild() != null){
           root.getLeftChild().setCode(root.getLeftChild().getCode() + "0");
           addCodes(root.getLeftChild());
     }
     if (root.getRightChild() != null) {
           root.getRightChild().setCode(root.getRightChild().getCode() + "1");
           addCodes(root.getRightChild());

     }
}

public static void addCode(Message root)
{
     if (root.getLeftChild() != null){
           addCodes(root.getLeftChild());
           addCode(root.getLeftChild());
     }
     if (root.getRightChild() != null) {
           addCodes(root.getRightChild());
           addCode(root.getRightChild());
     }
}

主要调用addCode。

关于java - 遍历一棵树,但访问的每个节点都应该访问下面的每个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961387/

相关文章:

java编译错误: method inside method

java - Hibernate:实体管理器工厂的问题

java - JavaFX 中纯粹悬停时触发的菜单?

typescript - 广度优先搜索实现陷入无限循环

ruby - 将递归算法转化为广度优先队列

java - Apache 兴趣点。 style.setBackgroundColor 不起作用

c - 使用级别顺序在 n 叉树中输入元素

string - 如何 split 绳索树?

Java-使用递归展平数组

linux - 递归计算Linux中所有嵌套子目录中的文件