题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
1.两个节点指针cur、pre(初始null)
2.先向左找打最小的
3.再递归找右边的的
4.双向链表,那left指向pre pre->right指向cur
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void fun(TreeNode *cur , TreeNode *&pre){ //一定得加上引用 因为pre动态变化 if(!cur)return ; fun(cur->left , pre);//一直往左 找到当前最小 cur->left = pre ; //小的在前 if(pre)pre->right = cur ; //逆序指针 pre = cur ; fun(cur->right,pre); //再往右递归 } TreeNode* Convert(TreeNode* pRootOfTree) { if(!pRootOfTree)return nullptr; TreeNode *pre = nullptr ; fun(pRootOfTree,pre); TreeNode *ans = pRootOfTree; while(ans->left)ans=ans->left; return ans; } };