二叉树及二叉树的操作程序
***基础知识点:
树的概念:由n个节点组成的有限集,有一个根结点,其它的节点只有一个前驱结点,但可以有多个后驱节点。
节点的度:节点的子节点个数
树的度:子节点最多的节点的度
树的深度:树的层数
森林:n个互不相交的树的集合
***重要知识点:
二叉树:每个节点的度不大于2,且子节点的位置不可更改
满二叉树:除叶子节点外所有节点的度均为2。(在不加层数的前提下,无法增加一个子节点)
满二叉树的特性:
1.第k层的节点个数:2ˆ(k-1)个
2.k层的全部节点:2ˆk-1个
完全二叉树:满二叉树的基础上从右至左,从下至上删除n个节点的二叉树。
完全二叉树的特性:
1.满二叉树一定是完全二叉树
2.完全二叉树不一定是满二叉树
3.完全二叉树的叶子节点只能在最后一层和倒数第二层的最右边
二叉树的遍历:
前序遍历:根->左子树->右子树 \中序遍历:左子树->根->右子树 - 深度遍历
后序遍历:左子树->右子树->根 /
层序遍历:逐层从上至下,从左至右 - 广度遍历
二叉树的遍历特性:
1.已知前序遍历和中序遍历,可唯一确定一个二叉树2.已知后序遍历和中序遍历,可唯一确定一个二叉树
-示例:
前序遍历:ABDGECF
中序遍历:GDBEACF
后序遍历:GDEBFCA
***代码示例:
//以下函数中交互的协议
typedef struct BinTree
{
char Data; //当前节点数据
struct BinTree *pL; //左字节点的地址
struct BinTree *pR; //右子节点的地址
}BTNode;
创建一个二叉树
char tree[]={
"ABDG###E##C#F##"}; //