剑指offer-二叉搜索树与双向链表

来源:互联网 发布:北伊利诺伊大学 知乎 编辑:程序博客网 时间:2024/06/06 10:59

问题

题目:[二叉搜索树与双向链表]

思路

  1. 这个题目做的还行,我就是按照我的想法来的。
    树的题目多半可以分治,所以我先试了试。
    觉得可以,原问题可以转化为把左子树转化为一个有序链表,然后把右子树转化为一个有序链表。这样根节点再分别和她们链接即可。

  2. 具体做的时候,应该是吸取了上次做某一道题目时的经验,做的时候从底层开始,逐步向上细化代码。因为大的框架很容易想,关键就是边界条件,以及递归里面的处理,这些操作可以在底层的时候想明白。

注意,返回值只是在左子树为空的时候需要特别处理。

代码

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {public:    TreeNode* Convert(TreeNode* pRootOfTree)    {        TreeNode*& root = pRootOfTree;        if( !root ) return NULL;        else{            TreeNode* ret = NULL;            TreeNode* l = Convert( root->left );            TreeNode* r = Convert( root->right );            if( l ){                TreeNode* p = l;                while(p->right) p = p->right;                p->right = root;                root->left = p;                ret = l; // 修改返回值            }else                ret = root; // 修改返回值            if( r ){                root->right = r;                r->left = root;            }            return ret;        }    }};
原创粉丝点击