二叉树

数据结构 | 二叉树

二叉树性质

  1. 第i层至多有2^(i-1)个结点
  2. 深度为k,总共2^k-1个结点
  3. 由n=n0+n1+n2,n=n1+2*n2+1联立,n2+1=n0
  4. n个结点的二叉树深度为log2(n)向下取整+1
  5. i=1,为根结点,i>1,i/2(C语言整数除法)为双亲
  6. 2*i<=n,左孩子2*i
  7. 2*i+1<=n,左孩子(2*i+1)
  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 层\n",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语言中引用二级指针可以很好地修改一级指针。

posted @ 2020-07-17 19:10  zer0_1s  阅读(148)  评论(0)    收藏  举报