Flatten Binary Tree to Linked List

来源:互联网 发布:import form js 编辑:程序博客网 时间:2024/06/18 06:53
Problem:

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

click to show hints.

Hints:

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


意思很明了,就是二叉树中序遍历,为了使逻辑更清晰,创建了一个外节点。
Solution:
/**
 * 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) {
        Stack<TreeNode> st = new Stack<>();
        
        st.push(root);
        
        TreeNode tail = new TreeNode(-1);
        
        while(!st.empty())
        {
             TreeNode p = st.pop();
             while(p!=null)
             {
                 tail.left = null;
                 tail.right = p;
                 tail = tail.right;
                 if(p.right!=null)
                     st.push(p.right);
                 p = p.left;
             }
        }
    }
}
0 0
原创粉丝点击