码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode第一刷_ Flatten Binary Tree to Linked List

时间:2017-04-14 19:39:35      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:链表   保存   如何   返回   ret   next   tco   cpp   code   

提示中说明了,改动后的链表相当于原树的前序遍历结果。前序遍历是根左右,因为要把转换后的左子树链接到根节点的右子树上,因此进入递归之后要先把节点的右子树保存下来,然后进入左子树,左子树转换后应该返回最后一个訪问的节点。这个节点的后继是根节点的转换后右子树。说起来很绕,可能看代码反而好一些。

注意一个问题是,不管如何。转换后的根节点一定要把左子树置空。要么会报错的。

TreeNode* preOrder(TreeNode *root){
    if(!root||(!root->left&&!root->right))
        return root;
    TreeNode *pre=NULL, *next;
    next = root->right;
    if(root->left){
        root->right = root->left;
        pre = preOrder(root->left);
    }
    root->left = NULL;
    if(!next)
        return pre;
    if(pre)
        pre->right = next;
    return preOrder(next);
    
}
class Solution {
public:
    void flatten(TreeNode *root) {
        preOrder(root);
        return;
    }
};


leetcode第一刷_ Flatten Binary Tree to Linked List

标签:链表   保存   如何   返回   ret   next   tco   cpp   code   

原文地址:http://www.cnblogs.com/gccbuaa/p/6710337.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!