关于Leetcode的Binary Tree Upside Down代码的理解

新手上路,请多包涵
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如何实现的,谢谢各位。

阅读 2.5k
1 个回答
新手上路,请多包涵

明白了可以理解为栈的先进后出。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏