Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that shares the same parent node) or empty, flip it upside down and turn it into a tree where the original right nodes turned into left leaf nodes. Return the new root.
For example:
Given a binary tree {1,2,3,4,5},
1
/ 
2   3
/ 
4   5
return the root of the binary tree [4,5,2,#,#,3,1].
4
/ 
5   2
/ 
3   1
思路:先找到新二叉树的根节点,上层的父节点通过栈来记录,找到新的根节点以后,不断弹出栈顶,来构造新的二叉树。
public TreeNode upsideDownBinaryTree(TreeNode root) {
    if (root == null) {
        return root;
    }
    Stack<TreeNode> parents = new Stack<>();
    //find new root
    TreeNode dummy = root;
    while (dummy.left != null) {
        parents.push(dummy);
        dummy = dummy.left;
    }
    TreeNode newRoot = dummy;
    //构造新树
    TreeNode newDummy = newRoot;
    while (!parents.empty()) {
        TreeNode cur = parents.pop();
        newDummy.right = cur;
        newDummy.left = cur.right;
        cur.right = null;
        cur.left = null;
        newDummy = newDummy.right;
    }
    return newRoot;
}
          









网友评论