[LintCode] Binary Tree Flipping

Posted Push your limit!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LintCode] Binary Tree Flipping相关的知识,希望对你有一定的参考价值。

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.

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  


Think Out Loud


For a given node n whose left child is not null, we do the following changes.

n.left.left = n.right;

n.left.right = n;

n.left = null;

n.right = null.

 

The new root after flipping is the leftmost node in the original tree.

We can solve this recursively bottom up. Solving it top down is more complicated because we need the top nodes to access 

the down nodes. Changing the top nodes makes this process a lot harder.

 

O(n) runtime, O(H) space, H is the max depth of the give binary tree.



以上是关于[LintCode] Binary Tree Flipping的主要内容,如果未能解决你的问题,请参考以下文章

lintcode-easy-Invert Binary Tree

lintcode-medium-Balanced Binary Tree

[LintCode] Binary Tree Flipping

lintcode-easy-Binary Tree Paths

[LintCode] Validate Binary Search Tree

lintcode-easy-Maximum Depth of Binary Tree