【链表】二叉搜索树与双向链表

题目:

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

 

解答:

 1 // 中序遍历即可。只需要记录一个pre指针即可。
 2 
 3  
 4 class Solution {
 5 public:
 6     TreeNode* Convert(TreeNode* pRootOfTree)
 7     {
 8         if(pRootOfTree == nullptr) 
 9         {
10             return nullptr;
11         }
12         
13         TreeNode* pre = nullptr;
14          
15         convertHelper(pRootOfTree, pre);
16          
17         TreeNode* res = pRootOfTree;
18         while(res ->left)
19         {
20             res = res ->left;
21         }
22         return res;
23     }
24      
25     void convertHelper(TreeNode* cur, TreeNode*& pre)
26     {
27         if(cur == nullptr) 
28         {
29             return;
30         }
31          
32         convertHelper(cur ->left, pre);
33          
34         cur ->left = pre;
35         if(pre) 
36         {
37             pre ->right = cur;
38         }
39         pre = cur;
40          
41         convertHelper(cur ->right, pre);    
42     }
43 };

 

 

posted @ 2020-05-06 17:03  梦醒潇湘  阅读(165)  评论(0)    收藏  举报