经过AVL单旋转,任意二叉查找树T1可以变换成另一颗(具有相同关键字的)查找树T2

来源:互联网 发布:用java打印对称三角形 编辑:程序博客网 时间:2024/05/21 09:19

数据结构与算法分析——c语言描述 练习4.43b 答案


看了作者给的思路写出来。复杂度不会证。证明也看不懂。。。。。。。。。。。。。。

日后我会重新把这本书的所有复杂度证明刷一编的。

头文件包括的二叉树的代码。


#include<stdlib.h>#include"tree.h"#include<stdio.h>struct TreeNode {ElementType element;SearchTree left;SearchTree right;};Position singleRotateWithLeft(Position k2) {Position k1 = k2->left;Position y = k1->right;k2->left = y;k1->right = k2;return k1;}Position singleRotateWithRight(Position k1) {Position k2 = k1->right;Position y = k2->left;k1->right = y;k2->left = k1;return k2;}SearchTree rotateToRoot(SearchTree t, ElementType X) {if (X < t->element) {t->left=rotateToRoot(t->left, X);return singleRotateWithLeft(t);}else if (X > t->element) {t->right= rotateToRoot(t->right, X);return singleRotateWithRight(t);}else {return t;}}SearchTree rotateTwoSearchTreeToSame(SearchTree t1,SearchTree t2) {if (t1&&t2) {t1 = rotateToRoot(t1, t2->element);t1->left =rotateTwoSearchTreeToSame(t1->left, t2->left);t1->right= rotateTwoSearchTreeToSame(t1->right, t2->right);return t1;}return NULL;}void Dir(SearchTree t) {if (t) {printf("%d ", t->element);Dir(t->left);Dir(t->right);}}int main() {int randInt[49];for (int i = 0; i < 49; i++)randInt[i] = rand();SearchTree t1 = NULL;SearchTree t2 = NULL;for (int i = 48; i >= 0; i--)t1 = insert(randInt[i], t1);for (int i = 0; i <49; i++)t2 = insert(randInt[i], t2);t1= rotateTwoSearchTreeToSame(t1, t2);Dir(t1);printf("\n");printf("\n");printf("\n");printf("\n");Dir(t2);}


0 0