把二元查找树转变成排序的双向链表
把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何
新的结点,只调整指针的指向。
比如将二元查找树
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16
struct bsTreeNode{ int val; bsTreeNode *left; bsTreeNode *right; bsTreeNode(int x): val(x), left(NULL), right(NULL){} }; bsTreeNode *convert(bsTreeNode * root){ if(root == NULL) return NULL; bsTreeNode *leftHead = NULL; if(root->left != NULL){ leftHead = convert(root->left); bsTreeNode *leftcpy = leftHead; while(leftcpy->right != NULL){ leftcpy = leftcpy->right; } leftcpy->right = root; root->left = leftcpy; } if(root->right != NULL){ bsTreeNode *rightHead = convert(root->right); rightHead->left = root; root->right = rightHead; } return (leftHead != NULL ? leftHead:root); }
Leave a comment