C语言数据结构代码练习day16
二叉树顺序存储
二叉树的顺序存储只适用按完全二叉树编号,结点 i 有以下性质:
1.左孩子2i
2.右孩子2i+1
3.父节点向下取整(i/2)
4.结点层数[log₂(i)]+1
缺点:顺序存储的二叉树结点必须按照完全二叉树编号,如果二叉树不是完全二叉树则会有大片空间浪费。
二叉树链式存储
链式二叉树的查找,从根节点开始依次遍历所有结点。
#include <stdio.h>
#include <stdlib.h>
typedef struct BiNode{
int data; //二叉树存储数据
struct BiNode *lchild, *rchild; //左孩子指针和右孩子指针
}BiNode,*BiTree; //二叉树结点、二叉树指针
int main()
{
/*二叉树初始化*/
BiTree root=NULL; //空树
/*插入根结点*/
root=(BiNode *)malloc(sizeof(BiNode)); //申请一片存储二叉树根节点空间
root->data=1; //根节点存储1
root->lchild=NULL; //没有左孩子
root->rchild=NULL; //没有右孩子
/*插入新结点*/
BiNode *p=(BiNode *)malloc(sizeof(BiNode)); //申请一片存储新结点空间
p->data=2; //新结点存储2
p->lchild=NULL; //没有左孩子
p->rchild=NULL; //没有右孩子
root->lchild=p; //p作为根节点左孩子
printf("\n");
system("pause");
}