题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

在中序遍历中调整:
static struct TreeNode* q=NULL;
void order(struct TreeNode* p){
    if(p->left)
        order(p->left);
    p->left=q;
    if(q)
        q->right=p;
    q=p;
    if(p->right)
        order(p->right);
}
struct TreeNode* Convert(struct TreeNode* pRootOfTree ) {
    // write code here
    if(!pRootOfTree) 
        return NULL;
    order(pRootOfTree);
    while(pRootOfTree->left) 
        pRootOfTree=pRootOfTree->left;
    return pRootOfTree;
}
存储中序遍历结点再连接:
class Solution {
public:
    vector<TreeNode*> tree;
    vector<TreeNode*> order(TreeNode* p){
        if(p->left)
            order(p->left);
        tree.push_back(p);
        if(p->right)
            order(p->right);
        return tree;
    }
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if(!pRootOfTree)
            return NULL;
        order(pRootOfTree);
        for(int i=0;i<tree.size()-1;i++){
            tree[i]->right=tree[i+1];
            tree[i+1]->left=tree[i];
        }
        return tree[0];
    }
};

全部评论

相关推荐

Edgestr:没项目地址就干脆把那一栏删了呗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务