> 文章列表 > 平衡二叉树——C语言描述——创建,增加结点

平衡二叉树——C语言描述——创建,增加结点

平衡二叉树——C语言描述——创建,增加结点

平衡二叉树——C语言描述——创建,增加结点

文章目录

  • 平衡二叉树——C语言描述——创建,增加结点
  • 0 测试用例框架
  • 1 定义
  • 2 数据结构
  • 2 增加平衡二叉树的结点
    • (1)代码
    • (2)测试用例

0 测试用例框架

https://blog.csdn.net/m0_59469991/article/details/127137119?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127137119%22%2C%22source%22%3A%22m0_59469991%22%7D

1 定义

​ 是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1

2 数据结构

​ 增加平衡因子,表示为左子树减右子树的差值。

/*AVL_TREE_NODE*/
#define EH (0)
#define LH (1)
#define RH (-1)typedef struct _AVL_TREE_NODE {int Data;int BF;struct _BINARY_TREE_NODE *LeftChild;struct _BINARY_TREE_NODE *RightChild;
}AVL_TREE_NODE;

2 增加平衡二叉树的结点

​ 设置Taller标志,增加结点后,Taller为true,当高度一致时或者左右平衡处理后,Taller为false。

​ 结点BF值的判断,当结点左右子树增加结点时,BF进行相应的变化,当BF的绝对值大于1值,进行左右平衡处理。

(1)代码

/*AVL_TREE_NODE*/
void PreOrderTraversePrintAVLTree(const AVL_TREE_NODE *AVLNode) {if (AVLNode == NULL) {return;} else {//printf("AVLNode = 0x%lx, AVLNode->Data = %d, AVLNode->BF = %d, AVLNode->LeftChild = 0x%lx, AVLNode->RightChild = 0x%lx\\n", AVLNode, AVLNode->Data, AVLNode->BF, AVLNode->LeftChild, AVLNode->RightChild);printf("AVLNode->Data = %d, AVLNode->BF = %d\\n", AVLNode->Data, AVLNode->BF);PreOrderTraversePrintAVLTree(AVLNode->LeftChild);PreOrderTraversePrintAVLTree(AVLNode->RightChild);}
}void InOrderTraversePrintAVLTree(const AVL_TREE_NODE *AVLNode) {if (AVLNode == NULL) {return;} else {InOrderTraversePrintAVLTree(AVLNode->LeftChild);printf("AVLNode->Data = %d, AVLNode->BF = %d\\n", AVLNode->Data, AVLNode->BF);InOrderTraversePrintAVLTree(AVLNode->RightChild);}
}void PostOrderTraversePrintAVLTree(const AVL_TREE_NODE *AVLNode) {if (AVLNode == NULL) {return;} else {PostOrderTraversePrintAVLTree(AVLNode->LeftChild);PostOrderTraversePrintAVLTree(AVLNode->RightChild);printf("AVLNode->Data = %d, AVLNode->BF = %d\\n", AVLNode->Data, AVLNode->BF);}
}void LeftRotate(AVL_TREE_NODE **AVLNode) {AVL_TREE_NODE *AVLRightNode = NULL;AVLRightNode = (*AVLNode)->RightChild;(*AVLNode)->RightChild = AVLRightNode->LeftChild;AVLRightNode->LeftChild = *AVLNode;*AVLNode = AVLRightNode;
}void RightRotate(AVL_TREE_NODE **AVLNode) {AVL_TREE_NODE *AVLLeftNode = NULL;AVLLeftNode = (*AVLNode)->LeftChild;(*AVLNode)->LeftChild = AVLLeftNode->RightChild;AVLLeftNode->RightChild = *AVLNode;*AVLNode = AVLLeftNode;
}void RightBalance(AVL_TREE_NODE **AVLNode) {AVL_TREE_NODE *AVLRightNode = NULL;AVL_TREE_NODE *AVLRightLeftNode = NULL;AVLRightNode = (*AVLNode)->RightChild;if (AVLRightNode->BF == RH) {AVLRightNode->BF = EH;(*AVLNode)->BF = EH;LeftRotate(AVLNode);} else if (AVLRightNode->BF == LH) {AVLRightLeftNode = AVLRightNode->LeftChild;switch (AVLRightLeftNode->BF) {case LH:AVLRightNode->BF = RH;(*AVLNode)->BF = EH;break;case EH:AVLRightNode->BF = EH;(*AVLNode)->BF = EH;break;case RH:AVLRightNode->BF = EH;(*AVLNode)->BF = LH;break;}AVLRightLeftNode->BF = EH;RightRotate(&((*AVLNode)->RightChild));LeftRotate(AVLNode);}
}void LeftBalance(AVL_TREE_NODE **AVLNode) {AVL_TREE_NODE *AVLLeftNode = NULL;AVL_TREE_NODE *AVLLeftRightNode = NULL;AVLLeftNode = (*AVLNode)->LeftChild;if (AVLLeftNode->BF == LH) {AVLLeftNode->BF = EH;(*AVLNode)->BF = EH;RightRotate(AVLNode);} else if (AVLLeftNode->BF == RH) {AVLLeftRightNode = AVLLeftNode->RightChild;switch (AVLLeftRightNode->BF) {case LH:AVLLeftNode->BF = EH;(*AVLNode)->BF = RH;break;case EH:AVLLeftNode->BF = EH;(*AVLNode)->BF = EH;break;case RH:AVLLeftNode->BF = LH;(*AVLNode)->BF = EH;break;}AVLLeftRightNode->BF = EH;LeftRotate(&((*AVLNode)->LeftChild));RightRotate(AVLNode);}
}bool AddAVLNode(AVL_TREE_NODE **AVLNode, int Key, bool *Taller) {//printf("AVLNode = 0x%lx, *AVLNode = 0x%lx, *Taller = %d\\n", AVLNode, *AVLNode, *Taller);if ((*AVLNode) == NULL) {//pritf("Test 01\\n");*AVLNode = (AVL_TREE_NODE *)malloc(sizeof(AVL_TREE_NODE));if ((*AVLNode == NULL)) {return false;}(*AVLNode)->Data = Key;(*AVLNode)->BF = EH;(*AVLNode)->LeftChild = NULL;(*AVLNode)->RightChild = NULL;*Taller = true;} else {//printf("Left\\n");if (Key < (*AVLNode)->Data) {if (!AddAVLNode(&((*AVLNode)->LeftChild), Key, Taller)) {return false;}if (*Taller == true) {switch ((*AVLNode)->BF) {case LH:LeftBalance(AVLNode);*Taller = false;break;case EH:(*AVLNode)->BF = LH;*Taller = true;break;case RH:(*AVLNode)->BF = EH;*Taller = false;break;}}} else if (Key > (*AVLNode)->Data) {if (!AddAVLNode(&((*AVLNode)->RightChild), Key, Taller)) {return false;}if (*Taller == true) {switch ((*AVLNode)->BF) {case LH:(*AVLNode)->BF = EH;*Taller = false;break;case EH:(*AVLNode)->BF = RH;*Taller = true;break;case RH:RightBalance(AVLNode);*Taller = false;break;}}} else {*Taller = false;return false;}}return true;
}

(2)测试用例

/*AVL_TREE_NODE*/
void PreOrderTraverseAVLCompare(const int *CmpNode, const AVL_TREE_NODE *AVLNode) {if (AVLNode == NULL) {return;} else {//printf("CmpNode[%d] = %d, AVLNode->Data = 0x%lx, AVLNode->BF = %d, BiTreeNode->LeftChild = 0x%lx, BiTreeNode->RightChild = 0x%lx\\n", CmpNode[BiIndex], AVLNode->Data, AVLNode->BF, AVLNode->LeftChild, AVLNode->RightChild);//printf("AVLNode->Data = %d, AVLNode->BF = %d\\n", AVLNode->Data, AVLNode->BF);if (AVLNode->Data == CmpNode[BiIndex]) {PreOrderTraverseCompareNum++;}BiIndex++;PreOrderTraverseAVLCompare(CmpNode, AVLNode->LeftChild);PreOrderTraverseAVLCompare(CmpNode, AVLNode->RightChild);}
}void CmpPreOderBuildAVLTree(const int *CmpNode, const AVL_TREE_NODE *AVLNode, int NodeNum) {BiIndex = 0;PreOrderTraverseCompareNum = 0;TestNum++;PreOrderTraverseAVLCompare(CmpNode, AVLNode);printf("PreOrderTraverseCompareNum = %d, NodeNum = %d\\n", PreOrderTraverseCompareNum, NodeNum);if (PreOrderTraverseCompareNum != NodeNum) {FaildNum++;} else {PassNum++;}
}/*AddAVLNode*/
void TestAddAVLNode(void) {AVL_TREE_NODE *AVLNode = NULL;/*Test01*/// 30_EH//	30int Key01          = 30;int Num01          = 1;bool Taller01      = false;int CmpAVLNode01[] = { 30 };/*Test02*/// 30_LH//	    30//	10int Key02 = 10;int Num02 = 2;bool Taller02 = false;int CmpAVLNode02[] = { 30, 10 };/*Test03*/// 30_EH//	    30//	10      40int Key03 = 40;int Num03 = 3;bool Taller03 = false;int CmpAVLNode03[] = { 30, 10, 40 };/*Test04*/// 10_LH//	    30//   10    40// 9int Key04 = 9;int Num04 = 4;bool Taller04 = false;int CmpAVLNode04[] = { 30, 10, 9, 40 };/*Test05*/// LeftBlance_LH//	       30//     10       40//   9    // 5// 10_RightRotate//	       30//     9       40//  5    10int Key05 = 5;int Num05 = 5;bool Taller05 = false;int CmpAVLNode05[] = { 30, 9, 5, 10, 40 };/*Test06*/// 30_EH//	        30//     9        40//   5   10        50int Key06 = 50;int Num06 = 6;bool Taller06 = false;int CmpAVLNode06[] = { 30, 9, 5, 10, 40, 50 };/*Test07*/// 5_LH//	        30//     9        40//   5   10        50// 1int Key07 = 1;int Num07 = 7;bool Taller07 = false;int CmpAVLNode07[] = { 30, 9, 5, 1, 10, 40, 50 };/*Test08*/// LeftBlance_RH_EH_5_1//	        30//     9        40//   5   10        50// 1//  3// 1_LeftRotate//	         30//      9        40//    5   10        50//  3// 1// 5_RightRotate//	         30//      9        40//   3    10        50// 1   5int Key08 = 3;int Num08 = 8;bool Taller08 = false;int CmpAVLNode08[] = { 30, 9, 3, 1, 5, 10, 40, 50 };/*Test09*/// LeftBlance_RH_LH_9_3//	         30//      9        40//   3    10        50// 1   5//    4// 3_LefteRotate//	           30//        9        40//     5    10        50//   3// 1  4// 7_RightRotate//	          30//       5        40//    3    9         50//  1  4    10int Key09 = 4;int Num09 = 9;bool Taller09 = false;int CmpAVLNode09[] = { 30, 5, 3, 1, 4, 9, 10, 40, 50 };/*Test10*/// 9_EH//	          30//       5        40//    3    9         50//  1  4  6 10int Key10 = 6;int Num10 = 10;bool Taller10 = false;int CmpAVLNode10[] = { 30, 5, 3, 1, 4, 9, 6, 10, 40, 50 };/*Test11*/// LeftBalance_RH_RH_30_5//	             30//       5               40//    3    9                 50//  1  4  6 10//            15// 5_LeftRotate//	             30//       9               40//    5    10                 50//  3  6     15// 1 4// 30_RightRotate//	             9//       5               30//    3    6          10    40//   1 4                15    50int Key11 = 15;int Num11 = 11;bool Taller11 = false;int CmpAVLNode11[] = { 9, 5, 3, 1, 4, 6, 30, 10, 15, 40, 50 };/*Test12*/// RightBalance_RH//	             9//       5               30//    3    6          10    40//   1 4                15    50//                               60// 40_LeftRotate//	             9//       5                30//    3    6          10       50//   1 4                15  40   60int Key12 = 60;int Num12 = 12;bool Taller12 = false;int CmpAVLNode12[] = { 9, 5, 3, 1, 4, 6, 30, 10, 15, 50, 40, 60 };/*Test13*/// RightBalance_LH_EH//	              9//       5                 30//    3    6          10       50//   1 4                 15  40   60//                     12// 15_RightRotate//	              9//       5                 30//    3    6          10        50//   1 4                 12   40   60//                         15// 12_LeftRotate//	              9//       5                 30//    3    6          12        50//   1 4           10    15   40   60int Key13 = 12;int Num13 = 13;bool Taller13 = false;int CmpAVLNode13[] = { 9, 5, 3, 1, 4, 6, 30, 12, 10, 15, 50, 40, 60 };/*Test14*/// 6_RH//	              9//       5                 30//    3    6          12         50//   1 4     7      10    15   40    60int Key14 = 7;int Num14 = 14;bool Taller14 = false;int CmpAVLNode14[] = { 9, 5, 3, 1, 4, 6, 7, 30, 12, 10, 15, 50, 40, 60 };/*Test15*/// 60_RH//	              9//       5                 30//    3    6          12          50//   1 4     7      10    15   40    60//                                     70int Key15 = 70;int Num15 = 15;bool Taller15 = false;int CmpAVLNode15[] = { 9, 5, 3, 1, 4, 6, 7, 30, 12, 10, 15, 50, 40, 60, 70 };/*Test16*/// 60_EH//	              9//       5                 30//    3    6          12           50//   1 4     7      10    15   40     60//                                  55  70int Key16 = 55;int Num16 = 16;bool Taller16 = false;int CmpAVLNode16[] = { 9, 5, 3, 1, 4, 6, 7, 30, 12, 10, 15, 50, 40, 60, 55, 70 };/*Test17*/// RightBalance_LH_LH//	              9//       5                 30//    3    6          12            50//   1 4     7      10    15   40        60//                                     55  70//                                    53// 60_RightRotate//	              9//       5                 30//    3    6          12           50//   1 4     7      10    15   40      55//                                   53   60//                                          70// 50_LeftRotate//	              9//       5                    30//    3    6           12           55//   1 4     7      10    15     50    60//                             40  53    70int Key17 = 53;int Num17 = 17;bool Taller17 = false;int CmpAVLNode17[] = { 9, 5, 3, 1, 4, 6, 7, 30, 12, 10, 15, 55, 50, 40, 53, 60, 70 };/*Test18*/// RightBalance_LH_RH//	              9//       5                     30//    3    6           12                 55//   1 4     7      10    15         50      60//                                 40  53      70//                                      54// 55_RightRotate//	              9//       5                    30//    3    6           12              50//   1 4     7      10    15       40      55//                                      53    60//                                       54     70// 30_LeffRotate//	              9//       5                      50//    3    6             30            55//   1 4     7       12     40      53    60   //                 10   15           54     70int Key18 = 54;int Num18 = 18;bool Taller18 = false;int CmpAVLNode18[] = { 9, 5, 3, 1, 4, 6, 7, 50, 30, 12, 10, 15, 40, 55, 53, 54, 60, 70 };printf("-------Test start----------\\n");InitNum();/*Test01*/printf("\\n-------Test 01----------\\n");AddAVLNode(&AVLNode, Key01, &Taller01);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode01, AVLNode, Num01);/*Test02*/printf("\\n-------Test 02----------\\n");AddAVLNode(&AVLNode, Key02, &Taller02);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode02, AVLNode, Num02);/*Test03*/printf("\\n-------Test 03----------\\n");AddAVLNode(&AVLNode, Key03, &Taller03);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode03, AVLNode, Num03);/*Test04*/printf("\\n-------Test 04----------\\n");AddAVLNode(&AVLNode, Key04, &Taller04);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode04, AVLNode, Num04);/*Test05*/printf("\\n-------Test 05----------\\n");AddAVLNode(&AVLNode, Key05, &Taller05);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode05, AVLNode, Num05);/*Test06*/printf("\\n-------Test 06----------\\n");AddAVLNode(&AVLNode, Key06, &Taller06);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode06, AVLNode, Num06);/*Test07*/printf("\\n-------Test 07----------\\n");AddAVLNode(&AVLNode, Key07, &Taller07);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode07, AVLNode, Num07);/*Test08*/printf("\\n-------Test 08----------\\n");AddAVLNode(&AVLNode, Key08, &Taller08);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode08, AVLNode, Num08);/*Test09*/printf("\\n-------Test 09----------\\n");AddAVLNode(&AVLNode, Key09, &Taller09);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode09, AVLNode, Num09);/*Test10*/printf("\\n-------Test 10----------\\n");AddAVLNode(&AVLNode, Key10, &Taller10);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode10, AVLNode, Num10);/*Test11*/printf("\\n-------Test 11----------\\n");AddAVLNode(&AVLNode, Key11, &Taller11);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode11, AVLNode, Num11);/*Test12*/printf("\\n-------Test 12----------\\n");AddAVLNode(&AVLNode, Key12, &Taller12);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode12, AVLNode, Num12);/*Test13*/printf("\\n-------Test 13----------\\n");AddAVLNode(&AVLNode, Key13, &Taller13);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode13, AVLNode, Num13);/*Test14*/printf("\\n-------Test 14----------\\n");AddAVLNode(&AVLNode, Key14, &Taller14);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode14, AVLNode, Num14);/*Test15*/printf("\\n-------Test 15----------\\n");AddAVLNode(&AVLNode, Key15, &Taller15);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode15, AVLNode, Num15);/*Test16*/printf("\\n-------Test 16----------\\n");AddAVLNode(&AVLNode, Key16, &Taller16);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode16, AVLNode, Num16);/*Test17*/printf("\\n-------Test 17----------\\n");AddAVLNode(&AVLNode, Key17, &Taller17);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode17, AVLNode, Num17);/*Test18*/printf("\\n-------Test 18----------\\n");AddAVLNode(&AVLNode, Key18, &Taller18);printf("PreOrderTraversePrintAVLTree\\n");PreOrderTraversePrintAVLTree(AVLNode);printf("Compare\\n");CmpPreOderBuildAVLTree(CmpAVLNode18, AVLNode, Num18);/*Test Result*/printf("\\n-------Test result----------\\n");TestResult();
}

打印结果

-------Test start----------

-------Test 01----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 1, NodeNum = 1

-------Test 02----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 10, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 2, NodeNum = 2

-------Test 03----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 3, NodeNum = 3

-------Test 04----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 10, AVLNode->BF = 1

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 4, NodeNum = 4

-------Test 05----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 5, NodeNum = 5

-------Test 06----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 0

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = -1

AVLNode->Data = 50, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 6, NodeNum = 6

-------Test 07----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 9, AVLNode->BF = 1

AVLNode->Data = 5, AVLNode->BF = 1

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = -1

AVLNode->Data = 50, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 7, NodeNum = 7

-------Test 08----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 9, AVLNode->BF = 1

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = -1

AVLNode->Data = 50, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 8, NodeNum = 8

-------Test 09----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 9, AVLNode->BF = -1

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = -1

AVLNode->Data = 50, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 9, NodeNum = 9

-------Test 10----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = -1

AVLNode->Data = 50, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 10, NodeNum = 10

-------Test 11----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 1

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = -1

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = -1

AVLNode->Data = 50, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 11, NodeNum = 11

-------Test 12----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 1

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = -1

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 12, NodeNum = 12

-------Test 13----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 1

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = 0

AVLNode->Data = 12, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 13, NodeNum = 13

-------Test 14----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = 0

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = -1

AVLNode->Data = 7, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = 0

AVLNode->Data = 12, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 14, NodeNum = 14

-------Test 15----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = -1

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = -1

AVLNode->Data = 7, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = -1

AVLNode->Data = 12, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = -1

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = -1

AVLNode->Data = 70, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 15, NodeNum = 15

-------Test 16----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = -1

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = -1

AVLNode->Data = 7, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = -1

AVLNode->Data = 12, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = -1

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = 0

AVLNode->Data = 55, AVLNode->BF = 0

AVLNode->Data = 70, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 16, NodeNum = 16

-------Test 17----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = -1

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = -1

AVLNode->Data = 7, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = -1

AVLNode->Data = 12, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 55, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 53, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = -1

AVLNode->Data = 70, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 17, NodeNum = 17

-------Test 18----------

PreOrderTraversePrintAVLTree

AVLNode->Data = 9, AVLNode->BF = -1

AVLNode->Data = 5, AVLNode->BF = 0

AVLNode->Data = 3, AVLNode->BF = 0

AVLNode->Data = 1, AVLNode->BF = 0

AVLNode->Data = 4, AVLNode->BF = 0

AVLNode->Data = 6, AVLNode->BF = -1

AVLNode->Data = 7, AVLNode->BF = 0

AVLNode->Data = 50, AVLNode->BF = 0

AVLNode->Data = 30, AVLNode->BF = 1

AVLNode->Data = 12, AVLNode->BF = 0

AVLNode->Data = 10, AVLNode->BF = 0

AVLNode->Data = 15, AVLNode->BF = 0

AVLNode->Data = 40, AVLNode->BF = 0

AVLNode->Data = 55, AVLNode->BF = 0

AVLNode->Data = 53, AVLNode->BF = -1

AVLNode->Data = 54, AVLNode->BF = 0

AVLNode->Data = 60, AVLNode->BF = -1

AVLNode->Data = 70, AVLNode->BF = 0

Compare

PreOrderTraverseCompareNum = 18, NodeNum = 18

-------Test result----------

Print test result;

TestNum = 18, PassNum = 18, FaildNum = 0

按摩椅园地