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
思路: 基本思想就是用 preOrder 把TreeNode 放进一个 List 里面,然后取出来 left = null; right = next;
易错点: 别忘记把left 设置成 null, 最后一个节点的right 也设置成null;
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
if(root == null)
return;
TreeNode cur = root;
while(cur != null){
TreeNode temp = cur.right;
cur.right = cur.left;
cur.left = null;
TreeNode p = cur;
while(p.right != null)
p = p.right;
p.right = temp;
cur = cur.right;
}
}
}
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
if(root == null)
return;
ArrayList<TreeNode> list = new ArrayList<TreeNode>();
preOrder(root, list);
for(int i = 0; i < list.size() - 1; i++){
list.get(i).left = null;
list.get(i).right = list.get(i + 1);
}
list.get(list.size() - 1).left = null;
list.get(list.size() - 1).right = null;
}
private void preOrder(TreeNode root, ArrayList<TreeNode> list){
if(root == null)
return;
list.add(root);
preOrder(root.left, list);
preOrder(root.right, list);
}
}