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

二叉搜索树与双向链表

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);
    }
};

全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
10-25 02:13
门头沟学院 C++
牛客7351937293号:8.27笔试10.22评估
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务