您的位置:首页 > Web前端

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

2017-07-12 16:52 295 查看

问题

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

思路

这个题目做的还行,我就是按照我的想法来的。

树的题目多半可以分治,所以我先试了试。

觉得可以,原问题可以转化为把左子树转化为一个有序链表,然后把右子树转化为一个有序链表。这样根节点再分别和她们链接即可。

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

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

代码

/*
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;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: