顺序存储结构
链式存储结构
给树加上两个限制条件,就得到了二叉树:
二叉树的五种基本形态
如果二叉树所有的分支结点都有左孩子和右孩子结点,并且叶子结点都集中在二叉树的最下一层,则这样的二叉树称为满二叉树(a);对满二叉树进行编号,约定编号从1开始,从上到下,自左至右进行编号,各结点的编号与满二叉树中相同位置上的结点的编号均相同,那么这棵二叉树就是一棵完全二叉树。
虚线F不存在即为完全二叉树,否则不是。
typedef struct BTNode
{
DataType data;//数据域
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void preorder(BTNode *p)
{
if(p != NULL)
{
//对结点操作访问的函数
Visit(p);
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(BTNode *p)
{
if(p != NULL)
{
inorder(p->lchild);
//对结点操作访问的函数
Visit(p);
inorder(p->rchild);
}
}
void postorder(BTNode *p)
{
if(p != NULL)
{
postorder(p->lchild);
postorder(p->rchild);
//对结点操作访问的函数
Visit(p);
}
}
void level(BTNode *p)
{
int front,rear;
BTNode *que[maxSize];//定义一个循环对列,用来记录将要访问层的节点
front = rear = 0;
BTNode *q;
if(p != NULL)
{
rear = (rear+1)%maxSize;
que[rear] = p; //根结点入队
while(front != rear)
{
front = (front+1)%maxSize;
q = que[front]; //队头结点出队
Visit(q); //访问队头结点
if(q->lchild != null)
{
rear = (rear+1)%maxSize;
que[rear] = q->lchild;
}
if(q->rchild != null)
{
rear = (rear+1)%maxSize;
que[rear] = q->rchild;
}
}
}
}
赫夫曼树又叫最优二叉树,他的特点是带权路径最短(带权路径长度:从该结点到根结点之间的路径长度乘以结点的权值)
赫夫曼树的构造方法(给定n个权值,用这n个权值来构造赫夫曼树)