Java 将二叉树展平到链表

Java 将二叉树展平到链表,java,data-structures,linked-list,binary-tree,Java,Data Structures,Linked List,Binary Tree,给定一棵二叉树,将其展平到适当的链表中 例如,给定以下树: 1 / \ 2 5 / \ \ 3 4 6 被压扁的树应该看起来像: 1 \ 2 \ 3 \ 4 \ 5 \ 6 我是其他解决方案的一员,但我想问,为什么当我运行代码时,输出只与输入树匹配 public void flatten(TreeNode root) { if(r

给定一棵二叉树,将其展平到适当的链表中

例如,给定以下树:


    1
   / \
  2   5
 / \   \
3   4   6
被压扁的树应该看起来像:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6
我是其他解决方案的一员,但我想问,为什么当我运行代码时,输出只与输入树匹配

public void flatten(TreeNode root) {
        if(root == null)
            return;
        TreeNode newRoot = new TreeNode(root.val);
        List<TreeNode> list = new ArrayList<>();

        helper(root,list);
        TreeNode current = newRoot;
        for(int i = 1; i < list.size();i++) {
            current.right = new TreeNode(list.get(i).val);
            current = current.right;
        }
        root = newRoot;
    }

    public void helper(TreeNode oldNode,List<TreeNode> list) {
        if(oldNode != null) {
            list.add(oldNode);
            helper(oldNode.left,list);
            helper(oldNode.right,list);
        }
    }
public void展平(TreeNode root){
if(root==null)
返回;
TreeNode newRoot=新TreeNode(root.val);
列表=新的ArrayList();
助手(根,列表);
树节点电流=新根;
对于(int i=1;i
当您重新分配作为参数传递给方法的引用时,它在该方法之外没有任何效果。所以你的上一个作业
root=newRoot
展平()方法之外不会产生任何效果。如果创建另一个节点,则需要更改
root
对象的链接

TreeNode root = new TreeNode(10);
flatten(root);
调用
flatte
root
后,将指向与调用前完全相同的对象。 您可以尝试执行以下操作,而不是
root=newRoot

root.right = newRoot.right;
root.left = newRoot.left;

当您重新分配作为参数传递给方法的引用时,它在该方法之外没有任何效果。所以你的上一个作业
root=newRoot
展平()方法之外不会产生任何效果。如果创建另一个节点,则需要更改
root
对象的链接

TreeNode root = new TreeNode(10);
flatten(root);
调用
flatte
root
后,将指向与调用前完全相同的对象。 您可以尝试执行以下操作,而不是
root=newRoot

root.right = newRoot.right;
root.left = newRoot.left;

如果您想让专家找到您的问题,请添加相应的标签。。。请阅读。或者只需将函数更改为返回
TreeNode
返回newRoot
;如果您想让专家找到您的问题,请添加相应的标签。。。请阅读。或者只需将函数更改为返回
TreeNode
返回newRoot