Java 为什么这不会反转二叉树?
我不知道为什么这段反转二叉树的代码不起作用。当我反转值而不是实际节点时,它工作,但在这种情况下,如果节点为空,则不工作,这就是我需要使用节点进行反转的原因 您可以取消对打印行的注释,以查看它是否达到了正确的值,并按照应该更改的方式更改了树,但它返回了原始数组Java 为什么这不会反转二叉树?,java,algorithm,tree,binary-tree,Java,Algorithm,Tree,Binary Tree,我不知道为什么这段反转二叉树的代码不起作用。当我反转值而不是实际节点时,它工作,但在这种情况下,如果节点为空,则不工作,这就是我需要使用节点进行反转的原因 您可以取消对打印行的注释,以查看它是否达到了正确的值,并按照应该更改的方式更改了树,但它返回了原始数组 class Solution { public TreeNode invertTree(TreeNode root) { if(root == null) {
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) {
return null;
}
invertBinaryTree(root.left, root.right);
return root;
}
private static void invertBinaryTree(TreeNode l, TreeNode r) {
if(l == null || r == null) {
return;
}
TreeNode temp = l;
l = r;
r = temp;
// System.out.println(l.val);
// System.out.println(r.val);
invertBinaryTree(l.left, r.right);
invertBinaryTree(l.right, r.left);
}
}
Java对方法参数使用“按值传递”,而不是“按引用传递”。这意味着,如果将对象传递给方法,则可以更新方法中对象的成员变量,更改将反映在调用方法中,但是如果覆盖参数以引用不同的对象(就像更改l和r的值一样)调用方法中将不会更新对该对象的引用。您可以将函数重写为以下内容:
private static void invertBinaryTree(TreeNode t) {
TreeNode temp = t.left;
t.left = t.right;
t.right = temp;
if(t.left != null)
invertBinaryTree(t.left);
if(t.right != null)
invertBinaryTree(t.right);
}
然后通过传递
invertBinaryTree(root)在树的顶部调用它代码>将值反转将起作用。此外,如果其中一个为空,则返回。条件应该是if(l==null&&r==null),因为您只更改局部变量。要反转树,必须执行类似于TreeNode temp=node.left的操作;node.left=node.right;node.right=temp代码>@PavelSmirnov,但我从原始树的根向右和向左传递。它不是通过引用传递的吗?@sathvikp反转这些值是不起作用的,其中一方可能是空的,在这种情况下,它仍然是一个二叉树,但您无法查找它的值