题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
中序排序。用一个指针保存前一个结点。
代码
/*
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 == nullptr) return nullptr;
pre = nullptr;
inorder(pRootOfTree);
auto head = pRootOfTree;
while (head->left)
head = head->left;
return head;
}
void inorder(TreeNode* node){
if (node == nullptr) return;
inorder(node->left);
node->left = pre;
if (pre != nullptr)
pre->right = node;
pre = node;
inorder(node->right);
}
};