leetcode--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  


题意:给定二叉树。这个二叉树的所以右节点都没有子树。求将这个二叉树反转,使对于某个节点而言,其父节点变成自己的右节点,其兄弟节点变成自己的左节点,返回新树的根。

分类:二叉树


解法1:对于某个节点而言,我们每次访问,我们要保留它的左节点,因为它的左节点会变成下一个访问的节点,要保留它的右节点,因为右节点会变成下一个访问节点的兄弟节点,要保留这个节点本身,因为这个节点会变成下一个节点的父节点。

循环遍历左节点,保留相应节点,变化左右指针即可。

    public TreeNode UpsideDownBinaryTree(TreeNode root) {
        if(root == null)
            return null;
        TreeNode prev = root, neighbor = root.right, cur = root.left;//cur用来向左遍历,prev表示parent节点,neighbor表示兄弟节点
        while(cur != null){
            TreeNode cur_neighbor = cur.right, next = cur.left;//我们需要再改变树结构之前先行记录下一层的节点已经兄弟节点。
            cur.right = prev;
            cur.left = neighbor;
            prev = cur;
            neighbor = cur_neighbor;
            cur = next;
        }
        root.left = null;
        root.right = null;
        return prev;
    }
}


你可能感兴趣的:(LeetCode,数据结构,算法,二叉树)