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

二叉搜索树与双向链表

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

class Solution {
  public:
    TreeNode* Convert(TreeNode* pRootOfTree) {
        // 如果树为空,则直接返回nullptr
        if (pRootOfTree == nullptr) {
            return nullptr;
        }

        TreeNode* prev = nullptr; // 用于跟踪当前节点的前一个节点
        TreeNode* head = nullptr; // 用于记录链表的头节点

        // 执行中序遍历,并在遍历过程中调整节点指针以形成双向链表
        inorder(pRootOfTree, prev, head);

        // 返回链表的头节点
        return head;
    }

  private:
    void inorder(TreeNode* node, TreeNode*& prev, TreeNode*& head) {
        // 如果当前节点为空,则直接返回
        if (node == nullptr) {
            return;
        }

        // 先遍历左子树
        inorder(node->left, prev, head);

        // 处理当前节点
        if (prev != nullptr) {
            // 如果前一个节点存在,则设置前一个节点的右指针指向当前节点,并设置当前节点的左指针指向前一个节点
            prev->right = node;
            node->left = prev;
        } else {
            // 如果前一个节点不存在,则当前节点是链表的头节点
            head = node;
        }

        // 更新前一个节点为当前节点
        prev = node;

        // 再遍历右子树
        inorder(node->right, prev, head);
    }
};

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务