#剑指offer26二叉搜索树与双向链表

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&&tqId=11179&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

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

剑指offer26
图片说明
1、常规思路--保存到有序数组在更改
中序遍历保存到数组,然后再更改指向
时间复杂度:O(n), 空间复杂度:O(n)
缺点:多次(两次)遍历

个人代码

class Solution {
public:
    vector<TreeNode*>v;
    void midTraverse(TreeNode*pRoot)
    {
        if(!pRoot)
            return;
        midTraverse(pRoot->left);
        v.push_back(pRoot);
        midTraverse(pRoot->right);
    }

    TreeNode* Convert(TreeNode* pRootOfTree) {
        if(!pRootOfTree) return nullptr;
        midTraverse(pRootOfTree);
        for(int i=0;i<v.size()-1;i++)
        {
            v[i]->right=v[i+1];
            v[i+1]->left=v[i];
        }
        v[0]->left=nullptr;
        v[v.size()-1]->right=nullptr;
        return v[0];
    }
};

2、优化,一次遍历
全局保存每次遍历的上一个节点,注意细节头尾节点处理
时间复杂度:O(n) 空间复杂度:O(n)
优点:一次遍历
[2]:https://www.nowcoder.com/profile/396966893/codeBookDetail?submissionId=110301954
[个人代码][2]

class Solution {
public:
    TreeNode* lastNode=nullptr;//保存当前遍历的上一个节点,也会保存最后一个节点(未处理)
    TreeNode* pHead=nullptr;
    void midTraverse(TreeNode*pRoot)
    {
        if(!pRoot)
            return;
        midTraverse(pRoot->left);
        if(lastNode)
            lastNode->right=pRoot; //上一个节点right指向当前节点
        else
            pHead=pRoot; //链表头,第一次节点的上一个节点为空
        pRoot->left=lastNode; //当前节点的left指向上一个节点
        lastNode = pRoot;
        midTraverse(pRoot->right);
    }

    TreeNode* Convert(TreeNode* pRootOfTree) {
        if(!pRootOfTree) return nullptr;
        midTraverse(pRootOfTree);
        lastNode->right=nullptr; //处理最后一个节点right指向空
        return pHead;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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