二叉树-------二叉链表实现
Posted 贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树-------二叉链表实现相关的知识,希望对你有一定的参考价值。
1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef char TelemType; 4 5 typedef struct BinTree{ 6 TelemType data; 7 struct BinTree *LChild; 8 struct BinTree *RChild; 9 }BinaryTree; 10 11 // 12 13 14 BinaryTree* create_BinaryTree(BinaryTree *T) 15 { 16 TelemType tmp; 17 scanf("%c", &tmp); 18 if(tmp == ‘0‘) 19 return 0; 20 21 T = (BinaryTree*)malloc(sizeof(BinaryTree)); 22 T->data = tmp; 23 T->LChild = create_BinaryTree(T->LChild); 24 T->RChild = create_BinaryTree(T->RChild); 25 return T; 26 } 27 28 // 计算叶子节点的个数 29 int sum_left(BinaryTree *T) 30 { 31 int sum = 0, lnum, rnum; 32 if(T) 33 { 34 if((!T->LChild) && (!T->RChild)) 35 { 36 sum++; 37 } 38 lnum = sum_left(T->LChild); 39 sum += lnum; 40 rnum = sum_left(T->RChild); 41 sum += rnum; 42 } 43 return sum; 44 } 45 46 void preorder_traverse(BinaryTree *T) 47 { 48 if(T) 49 { 50 printf("%c ", T->data); 51 preorder_traverse(T->LChild); 52 preorder_traverse(T->RChild); 53 } 54 } 55 56 void inorder_traverse(BinaryTree *T) 57 { 58 if(T) 59 { 60 inorder_traverse(T->LChild); 61 printf("%c ", T->data); 62 inorder_traverse(T->RChild); 63 } 64 } 65 66 void postorder_traverse(BinaryTree *T) 67 { 68 if(T) 69 { 70 postorder_traverse(T->LChild); 71 postorder_traverse(T->RChild); 72 printf("%c ", T->data); 73 } 74 } 75 76 77 BinaryTree* get_tree_node(TelemType item, BinaryTree *ltree, BinaryTree *rtree) 78 { 79 BinaryTree *T; 80 T = (BinaryTree*)malloc(sizeof(BinaryTree)); 81 T->data = item; 82 T->LChild = ltree; 83 T->RChild = rtree; 84 return T; 85 } 86 87 BinaryTree* copy_tree(BinaryTree *T) 88 { 89 if(!T) 90 return NULL; 91 BinaryTree *newltree, *newrtree, *newT; 92 if(T->LChild) 93 newltree = copy_tree(T->LChild); 94 else 95 newltree = NULL; 96 if(T->RChild) 97 newrtree = copy_tree(T->RChild); 98 else 99 newrtree = NULL; 100 newT = get_tree_node(T->data, newltree, newrtree); 101 return newT; 102 } 103 104 int max(int n1, int n2) 105 { 106 return (n1 > n2) ? n1 : n2; 107 } 108 109 int get_deep(BinaryTree *T) 110 { 111 int dep = 0, ldep, rdep; 112 if(!T) 113 dep = 0; 114 else 115 { 116 ldep = get_deep(T->LChild); 117 rdep = get_deep(T->RChild); 118 dep = 1 + max(ldep, rdep); 119 } 120 } 121 122 int main() 123 { 124 BinaryTree *bin_tree, *tree; 125 bin_tree = create_BinaryTree(bin_tree); 126 printf("+++++++++++++++++++++++++++++\n"); 127 preorder_traverse(bin_tree); 128 puts(""); 129 inorder_traverse(bin_tree); 130 puts(""); 131 postorder_traverse(bin_tree); 132 puts(""); 133 printf("叶子节点个数%d\n", sum_left(bin_tree)); 134 printf("树的深度是%d\n", get_deep(bin_tree)); 135 tree = copy_tree(bin_tree); 136 preorder_traverse(tree); 137 return 0; 138 }
写在博客上,然后就要开始手写了~~~~~
以上是关于二叉树-------二叉链表实现的主要内容,如果未能解决你的问题,请参考以下文章
建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历,统计并输出结点个数。