经典二叉树
时间:2022-04-22
本文章向大家介绍经典二叉树,主要内容包括遍历方式、全部代码、运行结果、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
完全二叉树特点:
1 叶子节点只能出现在最下面两层
2 最下层的叶子一定集中在左部连续位置
3 倒数第二层,如果有叶子节点,一定都集中在右边
4 如果节点度为1,则该节点只有做孩子
5 同样节点数的二叉树,完全二叉树深度最小
性质1:在二叉树的第i层上至多有2的(i-1)次幂个节点
性质2:深度为k的二叉树最多有2的k-1次幂个节点
性质3:叶子节点数为m,度为2的节点数为n,那么 m=n+1
性质4:具有n个节点的完全二叉树深度为[log2n]+1
性质5:如果节点i的两个孩子是2i和2i+1
遍历方式
前序遍历
void PreOrderTree(BiTree *b){
if( b == NULL)
return;
printf("%c",b->data);
PreOrderTree(b->lchild);
PreOrderTree(b->rchild);
}
中序遍历
void InOrderTree(BiTree *b){
if( b == NULL)
return ;
InOrderTree(b->lchild);
printf("%c",b->data);
InOrderTree(b->rchild);
}
后序遍历
void PostOrderTree(BiTree *b){
if( b == NULL)
return ;
PostOrderTree(b->lchild);
PostOrderTree(b->rchild);
printf("%c",b->data);
}
全部代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 typedef struct BiTree{
4 int data;
5 struct BiTree * lchild,*rchild;
6 }BiTree;
7
8 void initTree(BiTree *b);
9 void PreOrderTree(BiTree *b);
10 void InOrderTree(BiTree *b);
11 void PostOrderTree(BiTree *b);
12
13 int main()
14 {
15 BiTree *b = (BiTree *)malloc(sizeof(BiTree));
16 initTree(b);
17 PreOrderTree(b);
18 printf("n");
19 InOrderTree(b);
20 printf("n");
21 PostOrderTree(b);
22 printf("n");
23 free(b);
24 return 0;
25 }
26 void initTree(BiTree *b){
27 b->data = 'A';
28 BiTree *b1 = (BiTree *)malloc(sizeof(BiTree));
29 b->lchild = b1;
30 b1->data = 'B';
31
32 BiTree *b2 = (BiTree *)malloc(sizeof(BiTree));
33 b->rchild = b2;
34 b2->data = 'C';
35
36 BiTree *b3 = (BiTree *)malloc(sizeof(BiTree));
37 b1->lchild = b3;
38 b3->data = 'D';
39
40 BiTree *b4 = (BiTree *)malloc(sizeof(BiTree));
41 b1->rchild = b4;
42 b4->data = 'E';
43 b4->lchild = NULL;
44 b4->rchild = NULL;
45
46 BiTree *b5 = (BiTree *)malloc(sizeof(BiTree));
47 b2->lchild = b5;
48 b5->data = 'F';
49 b5->lchild = NULL;
50 b5->rchild = NULL;
51
52 BiTree *b6 = (BiTree *)malloc(sizeof(BiTree));
53 b2->rchild = b6;
54 b6->data = 'G';
55 b6->lchild = NULL;
56 b6->rchild = NULL;
57
58 BiTree *b7 = (BiTree *)malloc(sizeof(BiTree));
59 b3->lchild = b7;
60 b7->data = 'H';
61 b7->lchild = NULL;
62 b7->rchild = NULL;
63
64 BiTree *b8 = (BiTree *)malloc(sizeof(BiTree));
65 b3->rchild = b8;
66 b8->data = 'I';
67 b8->lchild = NULL;
68 b8->rchild = NULL;
69 }
70 void PreOrderTree(BiTree *b){
71 if( b == NULL)
72 return;
73 printf("%c",b->data);
74 PreOrderTree(b->lchild);
75 PreOrderTree(b->rchild);
76 }
77
78 void InOrderTree(BiTree *b){
79 if( b == NULL)
80 return ;
81 InOrderTree(b->lchild);
82 printf("%c",b->data);
83 InOrderTree(b->rchild);
84 }
85
86 void PostOrderTree(BiTree *b){
87 if( b == NULL)
88 return ;
89 PostOrderTree(b->lchild);
90 PostOrderTree(b->rchild);
91 printf("%c",b->data);
92 }
运行结果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法