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

二叉搜索树与双向链表

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

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
  public:
    void inorder(vector<TreeNode*>& res, TreeNode* root) {
        if (!root) {
            return;
        }
        inorder(res, root->left);
        res.push_back(root);
        inorder(res, root->right);
    }

    void processRes(vector<TreeNode*>& res) {
        if (res.empty())
            return ;
        TreeNode* p = res.back();
        res.pop_back();
        while (!res.empty()) {
            p->left = res.back();
            res.back()->right = p;
            p = res.back();
            res.pop_back();
        }
        return ;
    }

    TreeNode* Convert(TreeNode* pRootOfTree) {
        vector<TreeNode*> res;
        inorder(res, pRootOfTree);

        if (res.empty())
            return nullptr;

        processRes(res);
        return res.front();
    }
};

先中序遍历,然后对存了节点的vector逐个调整指针。不过这样的空间复杂度一定不是O(1)

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务