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
;