经典二叉树

简介:
完全二叉树特点:
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 }
复制代码

运行结果

本文转自博客园xingoo的博客,原文链接:经典二叉树,如需转载请自行联系原博主。
相关文章
|
6月前
|
容器
【数据结构】二叉树经典题目
【数据结构】二叉树经典题目
【LeetCode】——链式二叉树经典OJ题详解
在之前的文章讲解了二叉树的链式结构的实现以及前、中、后序的遍历。不知道大家看完后有没有理解和有所收获,今天基于那篇文章给大家分享讲解几道经典的题目,更便于大家的理解和深入。
|
4月前
|
机器学习/深度学习 分布式数据库
数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第二弹)
数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第二弹)
49 0
|
4月前
|
移动开发
数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第一弹)
数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第一弹)
85 0
|
5月前
经典二叉树试题(一)
经典二叉树试题(一)
55 0
|
8月前
|
存储 算法
树和二叉树基础概念
树是一种非线性的数据结构,它是由n(n&gt;=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
|
10月前
|
存储
树和二叉树的基本概念和性质
树和二叉树的基本概念和性质
剑指offer 55 二叉树的深度
DFS深度优先二叉树无非就那几个步骤
二叉树经典14题——初学二叉树必会的简单题
二叉树经典14题——初学二叉树必会的简单题
81 0
【数据结构与算法】详解二叉树以及模拟实现二叉树
二叉树在学习数据结构中是一种很重要的类型,也是学习数据结构中比较困难的一种结构,但是在平时用的也是非常多,因此二叉树尤为重要. 本篇文章中会涉及到大量的递归代码,如果一些地方不太理解,可以尝试画图梳理代码执行流程 关于文章中的二叉树源码→点击即可跳转 需要的可以去看一看