您的位置:首页 > 其它

leedcode做题总结,题目Flatten Binary Tree to Linked List 2012/10/14

2014-07-20 15:01 288 查看
这个题是把一个二叉树压成一个由节点.right链接起来的linkedlist,将整个左子树压入节点与右儿子之间。

每个节点可以对左子树依次求递归,然后返回左子树处理过后的最后一个节点,与右儿子相连。

public TreeNode flat(TreeNode a){
if(a.left==null&&a.right==null)return a;
TreeNode rec=null;
while (a!=null){
if(a.left!=null){
TreeNode tmp = flat(a.left);
tmp.right=a.right;
a.right=a.left;
a.left=null;
rec = tmp;
a=tmp.right;

}else {
rec = a;
a=a.right;
}
}
return rec;
}
public void flatten(TreeNode root) {
if(root==null)return;
if(root.left==null&&root.right==null)return;
flat(root);
}


Update 2015/08/19: 上面的思路正确但是有一些细节不好,比如说tmp完全就没有必要存在

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode getFlat(TreeNode node){

if(node.left==null&&node.right==null)return node;
TreeNode res = null;
while (node != null){
if (node.left != null){
res = getFlat(node.left);
res.right = node.right;
node.right = node.left;
node.left = null;
node = res.right;
} else {
res = node;
node = node.right;

}
}
return res;
}
public void flatten(TreeNode root) {
if (root == null)
return;
getFlat(root);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: