首页 > 代码库 > Flatten Binary Tree to Linked List

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.

答案

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void flatten(TreeNode root) {
        if(root==null||(root.left==null&&root.right==null))
        {
            return;
        }
        TreeNode left=root.left;
        TreeNode right=root.right;
        TreeNode last=root;
        List<TreeNode>list=new LinkedList<TreeNode>();
        if(right!=null)
        {
            list.add(0,right);
        }
        if(left!=null)
        {
            list.add(0,left);
        }
        while(list.size()>0)
        {
            TreeNode p=list.get(0);
            list.remove(0);
            last.left=null;
            last.right=p;
            last=p;
            left=last.left;
            right=last.right;
            if(right!=null)
            {
                list.add(0,right);
            }
            if(left!=null)
            {
                list.add(0,left);
            }
        }
    }
}


Flatten Binary Tree to Linked List