【剑指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 };