二叉搜索树转换为排序双向链表,需利用二叉搜索树的特点:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
则中序遍历序列即为有序的。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: TreeNode* pre=nullptr; TreeNode* Convert(TreeNode* pRootOfTree) { TreeNode* root=pRootOfTree; while(root&&root->left){ root=root->left; } inorder(pRootOfTree); return root; } void inorder(TreeNode* root){ if(!root) return; inorder(root->left); root->left=pre; if(pre){ pre->right=root; } pre=root; inorder(root->right); } };