题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution { 11 public: 12 TreeNode* Convert(TreeNode* pRootOfTree) 13 { 14 TreeNode *pLastNodeInTree = NULL; 15 TreeConvert(pRootOfTree, pLastNodeInTree); 16 TreeNode *pFirstNodeInTree = pLastNodeInTree; 17 while (pFirstNodeInTree != NULL && pFirstNodeInTree->left != NULL) { 18 pFirstNodeInTree = pFirstNodeInTree->left; 19 } 20 return pFirstNodeInTree; 21 } 22 void TreeConvert(TreeNode* pNode, TreeNode* &pLastNodeInTree) { 23 if (pNode == NULL) { 24 return; 25 } 26 TreeNode* pCurrent = pNode; 27 if (pNode->left != NULL) { 28 TreeConvert(pNode->left, pLastNodeInTree); 29 } 30 pCurrent->left = pLastNodeInTree; 31 if (pLastNodeInTree != NULL) 32 pLastNodeInTree->right = pCurrent; 33 pLastNodeInTree = pCurrent; 34 if (pNode->right != NULL) { 35 TreeConvert(pNode->right, pLastNodeInTree); 36 } 37 } 38 };