BST转换成有序链表

把二元查找树转变成排序的双向链表(树)
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。

 1 struct BSTreeNode{
 2     int val;
 3     BSTreeNode* left;
 4     BSTreeNode* right;
 5     BSTreeNode(int x) : val(x),left(nullptr),right(nullptr){}
 6 };
 7 
 8 void helper(BSTreeNode* root,BSTreeNode*& head, BSTreeNode*& tail){
 9     if(!root) return;
10     helper(root->left,head,tail);
11     root->left = tail;
12     if(tail){
13         tail->right = root;
14     }else{
15         head = root;
16     }
17     tail = root;
18     helper(root->right,head,tail);
19 }
20 
21 BSTreeNode* ConvertBSTree2List(BSTreeNode* root){
22     BSTreeNode* head = nullptr;//list head
23     BSTreeNode* tail = nullptr;//list tail
24     helper(root,head,tail);
25     return head;
26 }
27 
28 int main(){
29     BSTreeNode* root = new BSTreeNode(10);
30     root->left = new BSTreeNode(6);
31     root->right = new BSTreeNode(14);
32     root->left->right = new BSTreeNode(8);
33     BSTreeNode* head;
34     head = ConvertBSTree2List(root);
35     return 0;
36 }
原文地址:https://www.cnblogs.com/wxquare/p/4946006.html