- 二叉树的概念与性质
- 二叉树的存储结构
- 二叉树的前中后遍历方法
- 二叉树的非递归遍历方法
- 二叉树的层次遍历算法
- 由二叉树遍历衍生出来的各种函数算法
- 习题板块
二叉树的概念与性质
定义:二叉树是有限结点的集合 二叉树有五种形态,有四种表示方法,其中括号表示法是最重要的,下面的链式存储结构也是根据括号表示法来的== 二叉树的性质: 性质1:非空二叉树上的叶子节点数等于双分支节点数加1 性质2:非空二叉树的第i层上最多有2(i-1)个结点 性质3:高度位h的二叉树最多有2(h)-1个结点
二叉树的存储结构
二叉树的存储结构分为顺序存储和链式存储。 书上的顺序存储介绍的十分少,一笔带过了。 我理解的顺序存储应该是可以变换的,怎么变换呢,得根据题目来。 第一种形式便是一个数组存储,如下图
那我们得到了头结点怎么去寻找其他的结点呢???可以利用我们的顺序存储,下标规则:双亲的结点下标为 i/2 左孩子的小标为2i 右孩子的下标为2i 1 第二种形式也是一个数组存储,但是题目给我们的结点并不是有序的,我们用一个结构体数组,扩大两个值,一个结点分别存储数值,左孩子的数组下标和右孩子的数组下标,如图
链式存储结构:
链式结构中的创建二叉树主要是根据括号表示法来创建的,为了节省时间,我没有尝试去写,直接贴了教材的源码。
代码语言:javascript复制//二叉树的基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
ElemType data; //数据元素
struct node *lchild; //指向左孩子节点
struct node *rchild; //指向右孩子节点
} BTNode;
void CreateBTree(BTNode * &b,char *str) //创建二叉树
{
BTNode *St[MaxSize],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL; //建立的二叉树初始时为空
ch=str[j];
while (ch!='