[二叉树]二叉搜索树与双向链表

86 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

问题

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。

思路

利用二叉搜索树中序遍历有序的特点,将二叉搜索树转换成排序的双向链表。

代码实现

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    TreeNode* pre;
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if (pRootOfTree == NULL) return pRootOfTree;
        // 找到头结点并返回
        TreeNode* tmp = pRootOfTree;
        while (tmp->left)
        {
            tmp = tmp->left;
        }
        // 中序遍历
        inorder(pRootOfTree);
        return tmp;
    }
    void inorder(TreeNode* root)
    {
        if (root == NULL) return;
        inorder(root->left);
        // 构建双向链表
        root->left = pre;
        if (pre) pre->right = root;
        pre = root;
        
        inorder(root->right);
    }
};