二叉搜索树与双向链表

题目描述

  输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
  思路:基于中序遍历方法,用一个指针始终指向双向链表的最后一个节点,转换完以后即指向双向链表的最后一个节点
 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 };

 

 

posted @ 2017-12-26 09:29  jeysin  阅读(123)  评论(0编辑  收藏  举报