Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >经典二叉树

经典二叉树

作者头像
用户1154259
发布于 2018-01-17 11:07:49
发布于 2018-01-17 11:07:49
44200
代码可运行
举报
运行总次数:0
代码可运行

完全二叉树特点:

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

遍历方式

前序遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void PreOrderTree(BiTree *b){
    if( b == NULL)
        return;
    printf("%c",b->data);
    PreOrderTree(b->lchild);
    PreOrderTree(b->rchild);
}

中序遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void InOrderTree(BiTree *b){
    if( b == NULL)
        return ;
    InOrderTree(b->lchild);
    printf("%c",b->data);
    InOrderTree(b->rchild);
}

后序遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void PostOrderTree(BiTree *b){
    if( b == NULL)
        return ;
    PostOrderTree(b->lchild);
    PostOrderTree(b->rchild);
    printf("%c",b->data);
}

全部代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 }

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-01-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
二叉树的性质和常用操作代码集合
二叉树的性质和常用操作代码集合 性质: 二叉树的性质和常用代码操作集合 性质1:在二叉树的第i层上至多有2^i-1个结点 性质2:深度为k的二叉树至多有2^k - 1个结点 性质3:对任意一棵二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0 = n2 + 1 满二叉树:深度为k且有2^-1个结点的树 完全二叉树:深度为k,结点数为n的二叉树,如果其结点1~n的位置序号分别与等高的满二叉树的结 点1~n的位置序号一一对应,则为完全二叉树
Steve Wang
2018/02/05
7270
二叉树由浅至深(上)
树有很多种表示方式,如:双亲表示法,孩子表示法、孩子兄弟表示法等等。这里简单了解其中最常用的孩子兄弟表示法。
海盗船长
2020/08/27
2960
二叉树及其四种遍历
本次主要是针对二叉树的基本操作,另外还有二叉树相似的判断和叶子结点的计数,这些方法中都用到了递归。关于结构体的预定义还是会放在之前的博客(数据结构常用于定义总结)中
李志伟
2019/12/17
3750
二叉树的简单操作
BiTree Operation 1.先序创建二叉树 BiTree Creat_Bitree() { char ch; cin>>ch; BiTree T = new BiNode; if(ch =='#') { T = NULL; } else { T->data = ch; T->lchild = Creat_Bitree(); T->rchild = Creat_Bitree
AngelNH
2020/04/16
3280
数据结构算法整理-05-二叉树
广义表表示 :L = (A (B (C, D), E ( , F) ) ) 可以得出
devi
2021/08/18
2750
数据结构——树和二叉树
满二叉树是叶子一个也不少的树,而完全二叉树虽然前n-1层是满的,但最底层却允许在右边缺少连续若干个结点。满二叉树是完全二叉树的一个特例。
ruochen
2021/06/29
7350
二叉树的建立及其递归遍历(C语言实现)
-即使树中某个节点中只有一个子树的花,也要区分它是左子树还是右子树 二叉树一般有五种形态 1.空二叉树 2.只有一个根节点 3.根结点只有左子树 4.根节点只有右子树
全栈程序员站长
2022/08/10
9960
二叉树的建立及其递归遍历(C语言实现)
二叉树
定义:二叉树是有限结点的集合 二叉树有五种形态,有四种表示方法,其中括号表示法是最重要的,下面的链式存储结构也是根据括号表示法来的== 二叉树的性质: 性质1:非空二叉树上的叶子节点数等于双分支节点数加1 性质2:非空二叉树的第i层上最多有2(i-1)个结点 性质3:高度位h的二叉树最多有2(h)-1个结点
废江_小江
2022/09/05
3150
二叉树
前端进阶必备的二叉树知识
1. 有一颗树的括号表示为A(B, C(E, F(G)), D),回答下面的问题: 指出树的根结点? 指出棵树的所有叶子结点? 结点C的度是多少? 这棵树的度为多少? 这棵树的高度是多少? 结点C的孩子结点是哪? 结点C的双亲结点是谁? 答案: 这棵树的根结点为A 这棵树的叶子结点为B丶E丶G丶D // 叶子结点:一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。叶子是指出度为0的结点,又称为终端结点。 结点C的度为2 // 结点度:结点拥有子结点的数量 这棵树的度是3 // 二叉树的度:
用户7188259
2020/04/11
1.1K0
二叉树的建立与遍历
为什么学二叉树?因为计算机二级会涉及到一部分知识。在模拟考试的时候看到就直接跳过去了,心塞。终于花时间在网上找了源码好好看了一下也懂了个一二三。搜的时候是简单二叉树建立与遍历,所以自己学的不深,但是我感觉应付计算机二级也是够了。计算机二级主要还是主要以选择题出,所以基本知识点还是有必要了解的。 本次参考文章讲解:点击访问(本文章代码几乎和原文相同) 本文基本知识点参考于:未来教育二级C
布衣者
2021/09/07
3000
数据结构树的专题
由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。
用户2417870
2019/12/02
4060
PTA 二叉树求深度和叶子数(20 分)
该文介绍了如何计算二叉树的深度和叶子节点数量。首先介绍了二叉树的结构和定义,然后实现了用于计算二叉树深度和叶子节点数量的函数。裁判测试程序也进行了相应的实现。
Kindear
2017/12/29
7190
实验三 二叉树的基本操作(建立)及遍历
实验三 二叉树的基本操作(建立)及遍历 实验目的 1.学会实现二叉树结点结构和对二叉树的基本操作。 2.通过对二叉树遍历操作的实现,理解二叉树各种操作,学会利用递归方法编写对二叉树等类似递归数据结构进行处理的算法。 实验要求 1.认真阅读和掌握和本实验相关的教材内容。 2.编写完整程序完成下面的实验内容并上机运行。 实验内容 1.编写程序输入二叉树的结点个数和结点值,构造下图所示的二叉树。 2.编写程序,采用中序遍历的递归和非递归算法对此二叉树进行遍历。
谙忆
2021/01/20
7530
实验三 二叉树的基本操作(建立)及遍历
数据结构实验之二叉树实验基础
1、二叉树:二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分 [1] 。
LucianaiB
2025/05/28
1070
数据结构实验之二叉树实验基础
详解二叉树的存储王道版(C++/C)
树(Tree)是n(n≥0)个结点的有限集合,当n=0时,为空树;n>0时,为非空树。任意一棵非空树,满足:      
莫浅子
2022/11/18
5930
详解二叉树的存储王道版(C++/C)
数据结构不懂二叉树,就来看这里吧
二叉树(Binary Tree)相信大家不陌生吧,不管在面试还是平时开发中,都会经常用到,其定义为每个节点最多两个子节点的有序树。本文将对二叉树进行全面而深入的讲解,涵盖其基本概念、存储结构、遍历方法以及相关操作的实现细节,帮助大家更好地理解和应用这一数据结构。
小明爱吃火锅
2025/01/16
1830
硬核技术——二叉树的存储方式
二叉树 二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。 相关术语 一棵深度为k,且有2^k-1 个结点的二叉树,称为满二叉树; 在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点,则此二叉树为完全二叉树; 所有节点都只有左子树,称为左斜树; 所有节点都只有右子树,称为右斜树; 性质 在二叉树的第i层上最多有2^i-1 个结点 深度为K的二叉树最多有2^k -1 个结点(K>=1) 对于任何一颗二叉树T,如果其终端结点数为n0,
CC老师
2022/01/13
1820
数据结构-二叉树遍历总结
chaibubble
2018/01/02
6400
数据结构-二叉树遍历总结
二叉树的应用详解 - 数据结构
1、排序树——特点:所有结点“左小右大 2、平衡树——特点:所有结点左右子树深度差≤1 3、红黑树——特点:除了具备二叉查找树的特性外还有5个特性以致保持自平衡。 4、字典树——由字符串构成的二叉排序树 5、判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重) 6、带权树——特点:路径带权值(例如长度) 7、最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。
黄规速
2022/04/14
1.4K0
二叉树的应用详解 - 数据结构
判断是否为完全二叉树
判断是否为完全二叉树 题目要求及思路分析 题目:编写算法判别给定二叉树是否为完全二叉树。 —《数据结构习题集(C语言版)》 思路: 使用层序遍历二叉树 若完全二叉树中的某个结点没有左孩子,则其一定没有右孩子 若完全二叉树中的某个结点缺左孩子或右孩子,则其一定没有后继结点 算法实现 1.二叉树及队列的结构体定义 /*-------二叉树的二叉链结点结构定义------*/ #define TElemType char typedef struct BiTNode{
李志伟
2019/12/17
9920
相关推荐
二叉树的性质和常用操作代码集合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验