程序媛詹妮弗
终身学习

Given a binary tree, flatten it to a linked list in-place.

For example, given the following tree:

    1
   / \
  2   5
 / \   \
3   4   6

The flattened tree should look like:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

题目

将左子树所形成的链表插入到root和root->right之间

 

思路

      1
   /         
  2(root)              假设当前root为2
 /   \     
3(p)  4     

      1
   /         
  2(root)   
 /     \     
3(p)—— 4(root.right)    p.right = root.right

     1
    /         
    2(root)   
 /    \     
3(root.right)- 4      root.right = root.left

      1
    /         
    2(root)   
      \     
3(root.right)- 4      root.left - null



代码

 1 class Solution {
 2     public void flatten(TreeNode root) {
 3         if (root == null) return;  // 终止条件
 4         // recursion
 5         flatten(root.left);
 6         flatten(root.right);
 7 
 8         if (root.left == null) return;
 9 
10         // 三方合并,将左子树所形成的链表插入到root和root->right之间
11         TreeNode p = root.left;
12         while(p.right != null) {
13             p = p.right; //寻找左链表最后一个节点
14         } 
15         p.right = root.right;
16         root.right = root.left;
17         root.left = null;
18     }
19 }

 

posted on 2018-10-21 05:28  程序媛詹妮弗  阅读(89)  评论(0编辑  收藏  举报