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
解法:
iterative:
public void flatten(TreeNode root) { if (root==null) { return; } Stack<TreeNode> stack=new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()){ TreeNode current=stack.pop(); if (current.right!=null) stack.push(current.right); if (current.left!=null) stack.push(current.left); if (!stack.isEmpty()) current.right = stack.peek(); current.left=null; } }
recursive:
public void flatten(TreeNode root) { if (root==null) { return; } TreeNode left=root.left; TreeNode right=root.right; flatten(left); flatten(right); root.left=null; root.right=left; TreeNode tmp=root; while(tmp.right!=null) { tmp=tmp.right; } tmp.right=right; }