二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
思路:基于中序遍历方法,用一个指针始终指向双向链表的最后一个节点,转换完以后即指向双向链表的最后一个节点
1 class Solution { 2 public: 3 void ConvertNode(TreeNode *pCur, TreeNode **ppLast) 4 { 5 if(pCur->left)ConvertNode(pCur->left, ppLast); 6 pCur->left=*ppLast; 7 if(*ppLast!=NULL)(*ppLast)->right=pCur; 8 *ppLast=pCur; 9 if(pCur->right)ConvertNode(pCur->right, ppLast); 10 } 11 TreeNode* Convert(TreeNode* pRootOfTree) 12 { 13 if(pRootOfTree==NULL)return NULL; 14 TreeNode *head=NULL; 15 ConvertNode(pRootOfTree, &head); 16 while(head->left)head=head->left;//指向双向链表第一个节点(升序) 17 return head; 18 } 19 };