二叉树实现
先序遍历:根---->左----->右 //根在前 先左后右
中序遍历:左---->根----->右 //根在中 先左后右
后序遍历:左---->右----->根 //根在后 先左后右

先序遍历: B E K F C G D
中序遍历: K E F B C G D
后序遍历:K F E G C D B
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <ctype.h> 5 typedef struct BinaryNode 6 { 7 char str; 8 struct BinaryNode * leftnode; 9 struct BinaryNode * rightnode; 10 }binanode; 11 int num = 0; 12 int height = 0; 13 int height_ls = 0; 14 //拷贝二叉树 15 binanode * CopyNode(binanode * root) 16 { 17 if (root == NULL) 18 { 19 return; 20 } 21 binanode *lchild = CopyNode(root->leftnode); //拷贝左子树 22 binanode *rchild = CopyNode(root->rightnode); //拷贝右子树 23 //创建节点 24 binanode *newnode = (binanode*)malloc(sizeof(binanode)); 25 newnode->str = root->str; 26 newnode->leftnode = root->leftnode; 27 newnode->rightnode = root->rightnode; 28 } 29 //求叶子节点数 30 void LeafNum(binanode *root) 31 { 32 if (root == NULL) 33 { 34 return; 35 } 36 if (root->leftnode == NULL && root->rightnode == NULL) 37 { 38 num++; 39 } 40 LeafNum(root->leftnode); 41 LeafNum(root->rightnode); 42 } 43 //求二叉树的高 44 void HeightNum(binanode *root) 45 { 46 if (root == NULL) 47 { 48 return; 49 } 50 if (root->leftnode != NULL || root->rightnode != NULL) 51 { 52 height_ls++; 53 if (height_ls > height) 54 { 55 height = height_ls; 56 } 57 } 58 else 59 { 60 height_ls = 1; 61 } 62 HeightNum(root->leftnode); 63 HeightNum(root->rightnode); 64 } 65 //递归法先序遍历------>根 左 右 66 void Recursion(binanode *root) 67 { 68 if (root == NULL) 69 { 70 return; 71 } 72 //打印根节点 73 printf(" %c ", root->str); 74 //遍历左节点 75 Recursion(root->leftnode); 76 //遍历右节点 77 Recursion(root->rightnode); 78 } 79 //递归法中序遍历------>左 根 右 80 void Recursionzhong(binanode *root) 81 { 82 if (root == NULL) 83 { 84 return; 85 } 86 //遍历左节点 87 Recursion(root->leftnode); 88 //遍历根节点 89 printf(" %c ", root->str); 90 //遍历右节点 91 Recursion(root->rightnode); 92 } 93 //递归法后序遍历------>左 右 根 94 void Recursionhou(binanode *root) 95 { 96 if (root == NULL) 97 { 98 return; 99 } 100 //打印左节点节点 101 Recursion(root->leftnode); 102 //遍历右节点 103 Recursion(root->rightnode); 104 //遍历根节点 105 printf(" %c ", root->str); 106 107 } 108 //创建二叉树 109 void CreaterBinaryTree() 110 { 111 //建立二叉树所需要的节点 112 binanode node1 = { 'A', NULL, NULL }; 113 binanode node2 = { 'B', NULL, NULL }; 114 binanode node3 = { 'C', NULL, NULL }; 115 binanode node4 = { 'D', NULL, NULL }; 116 binanode node5 = { 'E', NULL, NULL }; 117 binanode node6 = { 'F', NULL, NULL }; 118 binanode node7 = { 'G', NULL, NULL }; 119 binanode node8 = { 'H', NULL, NULL }; 120 binanode node9 = { 'I', NULL, NULL }; 121 binanode node10= { 'J', NULL, NULL }; 122 //按关系连接各自的节点,形成二叉树 123 node1.leftnode = &node2; 124 node1.rightnode = &node6; 125 node2.rightnode = &node3; 126 node3.leftnode = &node4; 127 node3.rightnode = &node5; 128 node6.rightnode = &node7; 129 node7.leftnode = &node8; 130 node8.leftnode = &node9; 131 node9.leftnode = &node10; 132 Recursion(&node1); //传入根节点,实行先序遍历 133 printf("\n"); 134 Recursionzhong(&node1); //传入根节点,实行中序遍历 135 printf("\n"); 136 Recursionhou(&node1); //传入根节点,实行后序遍历 137 printf("\n"); 138 LeafNum(&node1); //求叶子个数 139 printf("叶子数目为:%d \n", num); 140 HeightNum(&node1); //求叶子的高 141 printf("树高为:%d \n", height); 142 //拷贝二叉树 143 binanode *newnode = CopyNode(&node1); 144 Recursion(newnode); //遍历拷贝的二叉树 145 } 146 int main(void) 147 { 148 CreaterBinaryTree(); 149 system("pause"); 150 return 0; 151 }

浙公网安备 33010602011771号