public TreeNode UpsideDown(TreeNode root){
return UpsideDown(root,null);
}
public TreeNode UpsideDown(TreeNode p, TreeNode parent){
if (p==null) {
return parent;
}
TreeNode root = UpsideDown(p.left,p);
p.left = parent == null ? parent : parent.right;
p.right = parent;
return root;
}
我使用以下列子作为debugg的实例进行理解
public static void main(String[] args) {
// TODO Auto-generated method stub
BinaryTreeUpsideDown b = new BinaryTreeUpsideDown();
TreeNode T = b.new TreeNode(1);
T.left = b.new TreeNode(2);
T.right = b.new TreeNode(3);
T.left.left = b.new TreeNode(4);
T.left.right = b.new TreeNode(5);
b.UpsideDown(T);
}
1
/ \
2 3
/ \
4 5
以上代码能够理解搜索至最左边的叶子,此时p=null,return parent=4,但是之后我使用debugg功能细看后,当运行完
if (p==null) {
return parent;
}
return了parent=4后,debugg中的p直接赋值为4,parent赋值为2,就是我无法理解这个bottom-up如何实现的,谢谢各位。
明白了可以理解为栈的先进后出。