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