遇到一个题目:获取树的叶子节点并删除叶子节点
这是我的代码:
private List<Integer> getLeaves(TreeNode root, List<Integer> leaves) {
if(root == null){
return null;
}
if(root.left == null && root.right == null){
leaves.add(root.val);
// delete this node
root = null;
// root.val = -1;
} else {
getLeaves(root.left, leaves);
getLeaves(root.right, leaves);
}
return leaves;
}
跑完上面的代码,我发现叶子节点获取到了,但是没有被删除。 我把赋空注释掉,改为修改叶子节点的值,发现是可以修改的。
我重新写了一个例子:
TreeNode root = new TreeNode(1);
TreeNode rootTemp = root;
System.out.println("origin root : " + root);
rootTemp.val = 2;
System.out.println("after change rootTemp'val, root.val : " + root.val);
rootTemp = null;
System.out.println("after change rootTemp, root : " + root);
rootTemp = new TreeNode(3);
System.out.println("after change rootTemp, root : " + root);
发现修改值和修改引用是两种操作。
重新写了一个方法:
System.out.println("origin root : " + root);
changeReference(root);
System.out.println("after reference, root : " + root);
private void changeReference(TreeNode root) {
root = new TreeNode(3);
}
根据打印的结果,发现修改形参无法影响到实参 root 。
那么如果一个方法中,形参是对象类型的。
有办法修改 Java 形参的引用,来达到修改实参的目的吗?(比如重新 new 一个对象或者赋值为 null )
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.