二叉树是数据结构的一部分,其性质和堆非常相似。
虽然是树。但是二叉树我们在使用的时候都是倒着的
二叉树的结构如图所示

我们从图中可以得知,二叉树的结构是根朝上,叶朝下,这个1就是最原始的根,2和3就是1的左右子节点,2和3也会作为父节点,4和5,6和7就是2和3的左右节点。
注意!子树之间不可以有任何交集!
树的相关概念
1、结点的度:一个节点含有的子树个数为该节点的度。A有3个子节点,A的度就为3
2、叶节点/终端节点:度为0的节点
3、非终端节点或分支节点:度不为0的节点
4、双亲结点或父节点:若一个节点含有子节点,这个节点成为其子节点的父节点
5、孩子节点或子节点:一个结合含有的字数的根节点成为该节点的子节点
6、树的度:一棵树中,最大的节点度成为树的度
7、树的度:一棵树中,最大的结点的度称为树的度;
8、结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;
9、树的高度或深度:树中结点的最大层次
10、堂兄弟结点:双亲在同一层的结点互为堂兄弟
11、结点的祖先:从根到该结点所经分支上的所有结点;
12、子孙:以某结点为根的子树中任一结点都称为该结点的子孙。
13、森林:由m(m>0)棵互不相交的树的集合称为森林;
树的代码表示
cpp
typedef int DateType;
struct Node
{
struct Node* firstChild1;
struct Node* pNextBrother;
DataType data;
}
二叉树概念及结构
二叉树本质上是节点的有限集合
要么为空,要么是一个根节点架上两棵被称为左子树和右子树的二叉树组成

其实二叉树和树的本质区别在于,二叉树对节点度具有限制。
二叉树中没有度大于2(等于2可以)的节点,而且有左右之分不能颠倒,所以二叉树也是有效树
有两种特殊的二叉树
1:满二叉树:二叉树的每个父节点都有两个子节点,每一层节点数都达到最大值。层数为k,节点总数为2^k-1(2的k次幂减1)

2:完全二叉树:效率很高的数据结构,是满二叉树印出来的,有n个节点的二叉树,当且仅当每一个节点都与深度为k的满二叉树中编号从1~n的节点一一对应的时候成为完全二叉树。满二叉树是特殊的完全二叉树

二叉树的性质
根节点层数为1,非空二叉树上第i层最多有2的(i-1)次幂个节点
根节点层数为1,深度为h的二叉树最大节点数为2^h-1
对于所有二叉树,度为0其叶结点个数为n0,度为2的分支节点个数为n2,n0=n2+1
二叉树的存储
顺序存储,就使用数组来存储,只适合完全二叉树,如果不是会有空间的浪费。
链式存储:用链表来表示二叉树。链表的每个节点由三个域构成,数组域和左右指针域。左右指针分别表示该节点左孩子和右孩子所在链节点的存储位置。连是几点又分为二叉链和三叉链

cpp
typedef int BTDataType;
struct BinaryTreeNode
{
struct BinTreeNode* left;
struct BinTreeNode* right;
BTDataType data;
}
//二叉链
struct BinaryTreeNode
{
struct BinTreeNode *parent;
struct BinTreeNode* left;
struct BinTreeNode * right;
BTDataType data;
}
//三叉链