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
1、对于当前访问的node,假设左右两子树均为符合要求的展开链表
2、函数helper返回值为当前树展开后的尾部node
3、根据左右子树返回的链表尾部node,将当前父节点与左右子树串联成新的链表
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public void flatten(TreeNode root) {
helper(root);
}
public TreeNode helper(TreeNode node){
if(node==null)
return null;
if(node.left==null && node.right==null)
return node;
TreeNode leftTail=null;
if(node.left!=null){
leftTail=helper(node.left);
}
TreeNode rightTail=null;
if(node.right!=null){
rightTail=helper(node.right);
}
if(node.left!=null){
leftTail.right = node.right;
node.right = node.left;
node.left = null;
}
if(rightTail!=null){
return rightTail;
}else{
return leftTail;
}
}
}