数据结构 | 二叉树
二叉树性质
- 第i层至多有2^(i-1)个结点
- 深度为k,总共2^k-1个结点
- 由n=n0+n1+n2,n=n1+2*n2+1联立,n2+1=n0
- n个结点的二叉树深度为log2(n)向下取整+1
- i=1,为根结点,i>1,i/2(C语言整数除法)为双亲
- 2*i<=n,左孩子2*i
- 2*i+1<=n,左孩子(2*i+1)
先序创建&先序递归访问
#include <stdio.h>
#include <stdlib.h>
typedef char Elemtype;
typedef struct BiTNode
{
Elemtype data;
struct BiTNode * lchild,*rchild;
}BiTNode,*BiTree;
//先序递归来输入,创建二叉树
void Creat_BiTree(BiTree *T)//二级指针可以保证回传的根节点不变,同时二级指针可以改变一级指针
{
char ch;
scanf("%c",&ch);//注意scanf规范
if(ch==' ')
(*T)=NULL;
else
{
(*T)=malloc(sizeof(BiTNode));//第一次实际改变PT一级指针
(*T)->data=ch;
Creat_BiTree(&(*T)->lchild);
Creat_BiTree(&(*T)->rchild);
}
}
//访问操作
void visit(char ch,int level)
{
printf("%c 位于第 %d 层
",ch,level);
}
void PreOrderTraverse(BiTree T ,int level)
{
if(T)
{
visit(T->data,level);
PreOrderTraverse(T->lchild,level+1);
PreOrderTraverse(T->rchild,level+1);
}
}
int main()
{
int level=1;
BiTree PT=NULL;
Creat_BiTree(&PT);
PreOrderTraverse(PT,level);//
return 0;
}
情景:创建二叉树,填充字母,并显示对应的层数。
C语言中引用二级指针可以很好地修改一级指针。