把二元查找树转变成排序的双向链表
2016-05-20 00:27
375 查看
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
比如将二元查找树
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
比如将二元查找树
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
void visit(Node *root) { if (root == NULL) { return; } if (root->left != NULL) { visit(root->left); Node *p = root->left; while (p->right != NULL) { p = p->right; } root->left = p; p->right = root; } if (root->right != NULL) { visit(root->right); Node *p = root->right; while (p->left != NULL) { p = p->left; } root->right = p; p->left = root; } } Node* convert(Node *root) { if (root == NULL) { return NULL; } visit(root); while (root->left != NULL) { root = root->left; } return root; }
相关文章推荐