java—仅将所有列表元素添加到树的rightnode

wko9yo5t  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(272)

我已经创建了一个linkedlist并在上面添加了一些元素。现在我想把linkedlist中的所有元素添加到树中。仅在rightnode上。leftnode将为空。树就跟下面一样--

10
          \
           20
            \
             30
              \
               40

我编写了以下代码。但它覆盖了它的节点。没有给出正确的输出。我的代码如下--
我的二叉树是--

public class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode() {}
     TreeNode(int val) { this.val = val; }
     TreeNode(int val, TreeNode left, TreeNode right) {
       this.val = val;
       this.left = left;
       this.right = right;
     }
  }
Queue<Integer> lst = new LinkedList<>();        

    lst.add(10);
    lst.add(20);
    lst.add(30);
    lst.add(40);

    TreeNode nRoot=null;

    while(!lst.isEmpty()){                      

        if(nRoot==null)
            nRoot = new TreeNode(lst.poll());
        else{
            nRoot.right = new TreeNode(lst.poll());                        
            nRoot=nRoot.right;
        }
    }

这就是输出--

Output - [10]
    Expected Output - [10,null,20,null,30,null,40]

请帮忙!!!

5n0oy7gb

5n0oy7gb1#

您缺少树的每个节点的“父节点”。所以不能返回到树的根元素。
所以你的代码应该是这样的:

public class TreeNode {
 int val;
 TreeNode left;
 TreeNode right;
 TreeNode parent;
 TreeNode() {}
 TreeNode(int val) { this.val = val; }
 TreeNode(int val, TreeNode left, TreeNode right) {
   this.val = val;
   this.left = left;
   this.right = right;
 }
}

然后:

while(!lst.isEmpty()){                      

    if(nRoot==null)
        nRoot = new TreeNode(lst.poll());
    else{
        nRoot.right = new TreeNode(lst.poll());
        TreeNode parent=nRoot;                        
        nRoot=nRoot.right;
        nRoot.parent=parent;
    }
}

现在您可以这样打印树:

while(nRoot!=null){
 system.out.writeln(nRoot.val);
 nRoot=nRoot.parent;
}

相关问题