Poison

114. Flatten Binary Tree to Linked List

Iterate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public void flatten(TreeNode root) {
TreeNode curr = root;
while (curr != null) {
if (curr.left != null) {
TreeNode leftRoot = curr.left;
curr.left = null;
TreeNode rightRoot = curr.right;
curr.right = leftRoot;
TreeNode tmp = leftRoot;
while (tmp.right != null) {
tmp = tmp.right;
}

tmp.right = rightRoot;
}

curr = curr.right;
}
}
}
Recursion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public void flatten(TreeNode root) {
// root, left, right

if (root == null) {
return;
}

if (root.left == null) {
flatten(root.right);
} else {
TreeNode right = root.right;
flatten(root.left);
TreeNode tail = root.left;
while (tail.right != null) {
tail = tail.right;
}
tail.right = right;
root.right = root.left;
root.left = null;

flatten(root.right); // 不要忘记最左子树展开后继续对剩余的右子树进行展开
}
}
}
Recursion
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public void flatten(TreeNode root) {
if (root == null) {
return;
}

flatten(root.left);
flatten(root.right);

TreeNode leftRoot = root.left;
TreeNode rightRoot = root.right;

root.left = null;
root.right = leftRoot;

TreeNode curr = root;
while (curr.right != null) {
curr = curr.right;
}
curr.right = rightRoot;
}
}
Reference

114. Flatten Binary Tree to Linked List