欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二叉搜索树与双向链表

程序员文章站 2022-03-09 08:02:42
...

题目描述:

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

题目解析:

二叉搜索树使用中序遍历就是有序的,将二叉树转换成双向链表,就是要改变指针的指向。比如,作左子树的right = 根,根的left = 左子树,根的right = 右子树 ,右子树的left = 根。

二叉搜索树与双向链表

AC代码:

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    //双向链表的左边头结点和右边头结点
    TreeNode* leftHead = NULL;
    TreeNode* rightHead = NULL;
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree == NULL)
            return NULL;
        Convert(pRootOfTree->left);
        if(rightHead == NULL)
            leftHead = rightHead = pRootOfTree;
        else
        {
            rightHead->right = pRootOfTree;
            pRootOfTree->left = rightHead;
            rightHead = pRootOfTree;
        }
        Convert(pRootOfTree->right);
        return leftHead;   //双向链表的左边头结点
    }
};

(*^▽^*)