For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
解题思路:
1. 如果root同时有left, right, 则把right存到stack
2. 如果root有left, 则将root.right = root.left,即将左子 树移到右子树
3. 如果root == null, 则从stack pop出一个,将此作为root的右子树
4. 每次都将root.right 作为新的root, repeat 1-4
Java Code:
public void flatten(TreeNode root) { TreeNode p = root; Stacktmp = new Stack (); while(p != null){ if(p.right != null && p.left != null){ tmp.add(p.right); } if(p.left != null){ p.right = p.left; p.left = null; } if(p.right == null && !tmp.isEmpty()){ p.right = tmp.pop(); } p = p.right; } }
No comments:
Post a Comment