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
这道题其实就是通过中序遍历的方法把节点一个一个添加到右边,思路还是递归。
代码参考Code_Ganker
public void flatten(TreeNode root) {
ArrayList<TreeNode> preNode = new ArrayList<TreeNode>();
preNode.add(null);
helper(root, preNode);
}
public void helper(TreeNode root, ArrayList<TreeNode> preNode) {
if (root == null)
return;
TreeNode right = root.right;
if (preNode.get(0) != null) {
preNode.get(0).left = null;
preNode.get(0).right = root;
}
preNode.set(0, root);
helper(root.left, preNode);
helper(right, preNode);
}
这里有一个关键点在于一定要先记录right节点的位置,然后再递归right节点,而不能递归root.right节点,因为那样会死循环。
比如{1,2}就会出现1->2->2->2->2->2->2->2....的情况