有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在穿越一棵树,这很容易,我知道怎么做。但是,我希望在每次迭代中访问当前节点下的每个节点。我不确定我是否清楚,因此我将尝试说明这一点:

        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) 个答案

  1. # 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());
         }
    }
    

    Main调用addCode