当前位置:网站首页>树和二叉树(C语言)
树和二叉树(C语言)
2022-07-22 18:07:00 【我的博尔赫斯】
目录
Tip:自己的祖先可以包含自己,所以最近公共祖先可以是自己。如上图中节点f和节点k的最近公共祖先我们认为是f,而并非a。
2.二叉树的性质(比较重要)
一. 树的定义
有一个特殊的结点,称为根结点,根节点没有前驱结点
除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集 合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以 有0个或 多个后继。因此,树是递归定义的

Tip:如何判断树与非树?

树是不能有回路的。否则递归会死循环,譬如上图第一个树,A可以递归到C递归到D,然后又A->C->D,就死循环了。
二.树的一些概念

注意兄弟节点和堂兄弟节点的区别。兄弟节点是有相同父节点的节点,堂兄弟节点则是双亲在同一层的节点。
Tip:自己的祖先可以包含自己,所以最近公共祖先可以是自己。如上图中节点f和节点k的最近公共祖先我们认为是f,而并非a。
学这些概念的目的是为了方便描述,也为了能以后看懂题目要求。
三.树结构的实现(现在还不是二叉树)
树结构的实现会比较难,因为不知道每个节点有多少个子节点,我们可以定义一个
Tip:树结构实现的孩子兄弟表示法:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
}; 
兄弟孩子表示法不关心每个节点有多少孩子,父节点只需要指向第一个孩子,其余的孩子用兄弟指针连接起来。
Tip:树在Linux中会用来做目录树结构

四.二叉树
树的意义其实并不大,重要的是树中的一种特殊情况——二叉树。
1.二叉树的基本概念与性质
二叉树是度为2的树,注意度为2不代表每个节点都有两个孩子,而是最多有两个孩子

Tip:二叉树中有两种特殊的二叉树

完全二叉树:前n-1层都是满的,最后一层可以不满,但是最后一层从左往右连续。
满二叉树可以用链表或数组实现

2.二叉树的性质

第三点性质比较重要
边栏推荐
- Ping的原理和实现
- Druid源码阅读2-DruidDataSource的init过程
- jupyter import包失败
- Leetcode-172. zero after factorial
- Code random notes_ Linked list_ 142 circular linked list II
- Druid source code reading 8-druiddatasource removeabandoned mechanism
- leetcode-买卖股票的最佳时机含手续费
- Basic knowledge of C language
- leetcode-415.字符串相加
- DOM - node operation (II)
猜你喜欢
随机推荐
MQ入门教程
JQ data is output in the background, and the assembled record table has no effect on pop-up events
代码随想录笔记_链表_24两两交换链表中的节点
leetcode-415.字符串相加
GIC Introduction (II) - use of gic400
认识以及安装redis
Switch back to English after pycharm is translated into Chinese
jupyter import包失败
表单验证和正则表达式(二)
Methods and steps of packaging a uniapp project as a desktop application
redis 脚本扫描
代码随想录笔记_数组_209长度最小的子数组
Leetcode-504. Hex number
JS [string object and Math object]
架构训练营模块一作业
libcurl常用方法 post get download
js[String对象 and Math对象]
Leetcode-646. longest number pair chain
递归函数实现素数判断
C语言链表详解 & 两类重要链表的实现









