题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
提交链接:点击
思路:
1.将左子树构成双向链表,返回指向链表的头结点leftHead
2.定位到左子树的最后一个节点
3.如果左子树不为空,那么将root节点链接在左子树最后一个节点的后面,结果返回leftHead;如果为空,则结果返回root
4.将右子树构成双向链表,返回指向链表的头结点rightHead
5.如果右子树链表不为空的话,将rightHead链接在root后面
代码:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: TreeNode* Convert(TreeNode* pRootOfTree) { if(!pRootOfTree) return NULL; if(!pRootOfTree->left && !pRootOfTree->right) return pRootOfTree; //1 TreeNode *leftHead=Convert(pRootOfTree->left); //2 TreeNode *temp=leftHead; while(temp!=NULL && temp->right!=NULL){ temp=temp->right; } //3 if(leftHead){ temp->right=pRootOfTree; pRootOfTree->left=temp; } //4 TreeNode *rightHead=Convert(pRootOfTree->right); //5 if(rightHead){ pRootOfTree->right=rightHead; rightHead->left=pRootOfTree; } if(leftHead) return leftHead; else return pRootOfTree; } };