二叉搜索树转变为双向链表

2024/07/03 data struct binary tree link list 共 867 字,约 3 分钟

二叉搜索树转变为双向链表

牛客

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤𝑛≤10000≤n≤1000,二叉树中每个节点的值 0≤𝑣𝑎𝑙≤10000≤val≤1000
要求:空间复杂度𝑂(1)O(1)(即在原树上操作),时间复杂度 𝑂(𝑛)O(n)

链接:

leetcode

class Solution {
  public:
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if (!pRootOfTree)return nullptr;
        auto* ans = new TreeNode(0);
        ans->right = pRootOfTree;
        TreeNode* p_pre = ans;
        TreeNode* p = ans->right;
        TreeNode* pre = nullptr;
        TreeNode* tmp = nullptr;
        while (p) {
            while (p->left) { //left exist, pre exist
                pre = getPreNode(p);
                if (pre->right == nullptr) {
                    pre->right = p;
                    p = p->left;
                } else {
                    break;
                }
            }
            p_pre->right = p;
            p->left = p_pre;
            p_pre = p;
            p = p->right;
        }
        ans = ans->right;
        ans->left = nullptr;
        return ans;
    }
  private:
    //if root has left child,  it has preNode
    TreeNode* getPreNode(TreeNode* root) {
        TreeNode* pre = root->left;
        //preNode is null, or it's->right child is root
        while (pre->right != nullptr && pre->right != root) pre = pre->right;
        return pre;
    }
};

文档信息

Search

    Table of Contents