【leetcode刷题笔记】Flatten Binary Tree to Linked List

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

For example,
Given

         1
        / \
       2   5
      / \   \
     3   4   6

The flattened tree should look like:

   1
    \
     2
      \
       3
        \
         4
          \
           5
            \
             6

Hints:

If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.


 

题解:可以看出flatten以后得到的树其实就是原来树的先序遍历,并且所得到的树的左子都有null,右子都是原树先序遍历时的下一个节点。

利用递归先序遍历树即可,用lastNode保存上一个节点的信息,并且在递归过程中要注意保存根节点的右子,因为在递归遍历左子树的过程中,会把根节点的右子指针重新赋值,右子树会丢失。

代码如下:

 1 /**
 2  * Definition for binary tree
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     private TreeNode lastNode = null;
12     public void flatten(TreeNode root) {
13         if(root == null)
14             return;
15         
16         if(lastNode != null){
17             lastNode.left = null;
18             lastNode.right = root;
19         }
20         
21         lastNode = root;
22         
23         TreeNode right = root.right;
24         flatten(root.left);
25         flatten(right);
26     }
27 }
posted @ 2014-07-18 15:18  SunshineAtNoon  阅读(258)  评论(0编辑  收藏  举报