二叉搜索树与双向链表,c++

二叉搜索树与双向链表

http://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if (pRootOfTree == nullptr)
            return pRootOfTree;

        stack<TreeNode*> ista;
        vector<TreeNode*> ivec;
        auto pin = pRootOfTree;
        while (!(ista.empty() && pin == nullptr)){
            while(pin != nullptr){
                ista.push(pin);
                pin = pin->left;
            }            
            if (!ista.empty()){
                pin = ista.top();
                ista.pop();
                ivec.push_back(pin);
                pin = pin->right;
            }
        }        

        ivec.front()->left = nullptr;
        ivec.back()->right = nullptr;
        int length = ivec.size();
        for (int i = 0; i != length-1; ++i){
            ivec[i]->right = ivec[i+1];
            ivec[i+1]->left = ivec[i];
        }
        return ivec.front();
    }
};

写完后看了一下,和不少同学的思路相同
1、二叉搜索树的中序遍历是递增数列,先用非递归方式中序遍历搜索树,节点存在vec容器中
2、按顺序改变个节点的指向
欢迎交流指正!!!

全部评论
麻烦 问下大佬 按照您这种方法 空间复杂度是O(1)吗? 这好像不是在原树上操作吧?
1 回复 分享
发布于 2021-09-30 10:38
奈何本人没文化,一句**行天下
点赞 回复 分享
发布于 2021-09-21 22:18

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
9 2 评论
分享
牛客网
牛客企业服务