*Binary Tree Upside Down

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  

思路:

起始对于每一个节点,相应的操作为:
p.left = parent.right;
p.right = parent; 有bug

public class Solution {
    public TreeNode upsideDownBinaryTree(TreeNode root) {
        TreeNode p = root, parent = null, parentRight = null;
        while (p!=null) {
            TreeNode left = p.left;
            p.left = parentRight;
            parentRight = p.right;
            p.right = parent;
            parent = p;
            p = left;
        }
        return parent;
    }
}

reference: http://yuanhsh.iteye.com/blog/2170647

 

解法二:recursion

public TreeNode upsideDownBinaryTree(TreeNode root) {
      if (root == null || root.left == null && root.right == null)
        return root;

      TreeNode newRoot = upsideDownBinaryTree(root.left);

      root.left.left = root.right;
      root.left.right = root;

      root.left = null;
      root.right = null;

      return newRoot;
}

 

posted @ 2016-01-20 02:36  Hygeia  阅读(266)  评论(0编辑  收藏  举报