二叉树搜索树转换成排序双向链表

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43909184/article/details/102505298

牛客网链接:二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

先简单说一说二叉搜索树,二叉搜索树有一个特点:根大于左子树,小于右子树。二叉搜索树的中序遍历是有序的序列。
如下的一棵搜索二叉树:在这里插入图片描述
转换成有序双向链表就要对搜索二叉树进行中序遍历
双向链表结点的prev可以理解成二叉树的left,next理解成right。
中序遍历的时候需要prev对上一个结点记录

    void _Convert(TreeNode* root, TreeNode* &prev) {
        if (root == NULL)
            return;
        _Convert(root->left, prev);
        root->left = prev;
        if (prev)
            prev->right = root;
        prev = root;
        _Convert(root->right, prev);
    }
    
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if (pRootOfTree == NULL)
            return NULL;
        TreeNode* prev = NULL;
        _Convert(pRootOfTree, prev);
        //寻找双向链表的头结点
        TreeNode* head = pRootOfTree;
        while (head && head->left) {
            head = head->left;
        }
        return head;
  	}

猜你喜欢

转载自blog.csdn.net/qq_43909184/article/details/102505298