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
用pre-order遍历树,同时用一个prev来记录上一个结点,当从stack中pop出新节点时,prev.right指向当前节点,prev.left设为null
public void flatten(TreeNode root) {
if(root==null)
return;
Stack<TreeNode> stack= new Stack<TreeNode>();
stack.push(root);
TreeNode prev = null,node=null;
while(!stack.isEmpty()){
node = stack.pop();
if(node.right!=null)
stack.push(node.right);
if(node.left!=null)
stack.push(node.left);
if(prev!=null){
prev.right=node;
prev.left=null;
}
prev=node;
}
}