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

题目链接:二叉搜索树与双向链表

 

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

 

题解:这题也是参考了别人的最优解回答。首先看一下题目这个要求。大概就是下面图这个意思。

 

 一开始肯定会想到的是中序遍历。以中序遍历走完BST是可以得到一个递增的序列的。

但由于这是一个双向链表,我们得在中序遍历上做一个处理。以,右根左的顺序来遍历,

这样遍历完时,一定会指向最小的节点。

 

 

代码:

 

 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* head = NULL;
13     
14     TreeNode* Convert(TreeNode* pRootOfTree){
15         if(pRootOfTree == NULL )     return pRootOfTree;
16         Convert(pRootOfTree->right);
17         if(head == NULL)    head = pRootOfTree;
18         else{
19             head->left = pRootOfTree;
20             pRootOfTree->right = head;
21             head = pRootOfTree;
22         }
23         Convert(pRootOfTree->left);
24         return head;
25     }
26 };

 

posted @ 2020-03-03 22:35  甜酒果。  阅读(179)  评论(0编辑  收藏  举报