遍历树,但访问的每个节点应访问下面的每个节点

时间:2014-11-16 19:56:31

标签: java algorithm recursion

我正在穿越一棵树,这很容易,我知道如何做到这一点。但是,我希望每次迭代访问当前节点下的每个节点。我不确定我是否清楚,所以我会试着说明一下:

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

第一次迭代:节点是A:访问B,C,D,E,F,G 第二次迭代:节点是B:访问D,E 第二次迭代:节点为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());

         }
    }

但这显然不起作用。每次访问每个节点。我理解为什么,我只是不知道如何解决它。如果这是迭代的,它将是嵌套循环。什么是递归等价的呢?

1 个答案:

答案 0 :(得分:1)

我明白了。

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。