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
分析:
看见二叉树,首先想到递归,那么就是把左子树flattern接在root孩子,把右子树flattern接在左子树链的后面。
需要注意的是,左孩子指针要变成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;
toLink(root);
}
public TreeNode toLink(TreeNode node){
if(node.left==null && node.right==null)
return node;
TreeNode rHead = null;
if(node.right != null){
rHead = toLink(node.right);
rHead.left = null;
}
TreeNode p = node;
if(node.left != null){
TreeNode lHead = toLink(node.left);
node.right = lHead;
node.left = null;
lHead.left = null;
while(p.right != null)
p = p.right;
}
p.right = rHead;
return node;
}
}