数据结构之树和二叉树(二)

简介:

一、二叉树的定义(二叉树是树的特殊一族)

      二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点        和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

       总结:二叉树的定义有点复杂,看起来定义有点混乱。这没事,主要是利用二叉树的特点办事。(*^__^*) 嘻嘻……

二、二叉树的特点

   特点:  

    每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。(注意:不是都需要两棵子树,而是最多可以是两棵,没        有子树或者有一棵子树也都是可以的。)

       左子树和右子树是有顺序的,次序不能颠倒。

       即使树中某结点只有一棵子树,也要区分它是左子树还是右子树,下面是完全不同的二叉树:

       

   

     二叉树的五种基本形态

       空二叉树

   只有一个根结点

   根结点只有左子树

   根结点只有右子树

   根结点既有左子树又有右子树

       只有3个节点的二叉树就有5种形式

   

 

   完全二叉树

    对一棵具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点位置        完全相同,则这棵二叉树称为完全二叉树。

   满二叉树:

 一棵深度为k且有2k - 1个结点的二叉树。

  满二叉树特点

   叶子只能出现在最下一层。

   非叶子结点的度一定是2。

   在同样深度的二叉树中,满二叉树的结点个数一定最多,同时叶子也是最多。


       

    总结:

   1)二叉树是树的特殊一种,节点最多只有两个孩子(左右孩子),左右孩子还是有次序分。

   2)满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。


三、二叉树的代码实现

   简单的二叉树代码实现,中心思想是递归调用

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# include <stdio.h>
# include <stdlib.h>
#define OK  0
typedef char ElemType;
typedef  int  Status;
typedef struct BitNode
{
char data;
struct BitNode *lchild,*rchild;
}BitNode, *BitTree;
Status CreateBitTree(BitTree *T) //中序,先序,后序对树的创建无影响。此处采用中序
{
     ElemType e;
     scanf( "%c" , &e);
     if ( ' '  == e){
        *T = NULL;
     } else {
       *T = (BitTree)malloc(sizeof(BitNode));
       (*T)->data = e;
       CreateBitTree(&(*T)->lchild); //递归调用
       CreateBitTree(&(*T)->rchild);
     }
     return   OK;
}
void  visit(ElemType e,  int  level)
{
     printf( "元素%c位于第%d层\n" , e, level);
}
Status PreOrderTraverse(BitTree T,  int  level) //中序遍历,level是层数
{
     if (T){
     visit(T->data, level);
     PreOrderTraverse(T->lchild, level +  1 );
     PreOrderTraverse(T->rchild, level +  1 );
     }
return  OK;
}
int  main(){
     int  level =  1 ; //层次
     BitTree T = NULL;
     CreateBitTree(&T);
     PreOrderTraverse(T,level);
     return  0 ;
}


四、知识点回顾

  二叉树的特点、完全二叉树、满二叉树、满二叉树与完全二叉树的区别、代码的递归思想



本文转自lilin9105 51CTO博客,原文链接:http://blog.51cto.com/7071976/1207703,如需转载请自行联系原作者

相关文章
|
9月前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
286 10
 算法系列之数据结构-二叉树
|
9月前
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
243 3
 算法系列之数据结构-Huffman树
|
9月前
|
存储 自然语言处理 数据库
【数据结构进阶】AVL树深度剖析 + 实现(附源码)
在深入探讨了AVL树的原理和实现后,我们不难发现,这种数据结构不仅优雅地解决了传统二叉搜索树可能面临的性能退化问题,还通过其独特的平衡机制,确保了在任何情况下都能提供稳定且高效的查找、插入和删除操作。
701 19
|
11月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
371 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
11月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
315 12
|
11月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
192 10
|
11月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
473 3
|
12月前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
354 5
|
机器学习/深度学习 存储 算法
数据结构实验之二叉树实验基础
本实验旨在掌握二叉树的基本特性和遍历算法,包括先序、中序、后序的递归与非递归遍历方法。通过编程实践,加深对二叉树结构的理解,学习如何计算二叉树的深度、叶子节点数等属性。实验内容涉及创建二叉树、实现各种遍历算法及求解特定节点数量。
324 4

热门文章

最新文章