本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
思路
利用二叉搜索树中序遍历有序的特点,将二叉搜索树转换成排序的双向链表。
代码实现
/*
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);
}
};