二叉树

来源:互联网 发布:方志敏杀害传教士 知乎 编辑:程序博客网 时间:2024/05/16 05:08

二叉树的链式存储

LinkBitTree.h

#include "stdio.h"#include "stdlib.h"#define MAXSIZE 100;//数据类型typedef int DataType;//二叉树结点类型typedef struct Node{    DataType data;    struct Node *lchild;    struct Node *rchild;}*BitTree,BitNode;//二叉树初始化//根结点指针置空//*BitTree是Node类型的指针,BitTree是指针变量,是变量//BitTree *T 是指向 (指针变量BitTree)的指针//BitTree存储的是二叉树结点的内存地址,变量T存储的是BitTree的内存地址//总之BitTree是内存地址,传递参数是要注意void InitBitTree(BitTree *T){    *T=NULL;}//递归销毁二叉树void DestroyBitTree(BitTree *T){    if(*T){        if((*T)->lchild)            DestroyBitTree(&((*T)->lchild));        if((*T)->rchild)            DestroyBitTree(&((*T)->rchild));    }    free(*T);    *T=NULL;}//递归创建二叉树,#代表空void CreatBitTree(BitTree *T){    DataType ch;    scanf("%c",&ch);/* %是格式化输出符号,后面接输出格式;d 表示十进制;o 表示八进制;ox 表示十六进制;        c 表示输出字符 */    if(ch=='#')        *T=NULL;    else    {        *T = (BitTree)malloc(sizeof(BitNode));        if(!(*T))            exit(-1);        (*T)->data=ch;        CreateBitTree(&((*T)->lchild));        CreateBitTree(&((*T)->rchild));    }}//二叉树左插入操作。指针p指向二叉树T某个结点,将子树c插入到T中,使c成为p指向结点的左子树,p指向结点的原来的左子树成为c的右子树int InsertLeftChild(BitTree p,BitTree c){    if(p)    {        c->rchild = p->lchild;        p->lchild = c;        return 1;    }    return 0;}//二叉树右插入操作。指针p指向二叉树T某个结点,将子树c插入到T中,使c成为p指向结点的右子树,p指向结点的原来的左子树成为c的右子树int InsertRightChild(BitTree p,BitTree c){    if(p)    {        c->rchild = p->rchild;        p->rchild = c;        return 1;    }    return 0;}//返回二叉树结点值为e的指针操作BitTree Point(BitTree T,DataType e){    BitTree Q[MaxSIZE];    int front = 0 , rear = 0;    BitNode *p;    if(T)    {        Q[rear] = T;        rear++;        while(front!=rear)        {            p=Q[front];            front++;            if(p->data==e) return p;            if(p->lchild)            {                Q[rear]=p->lchild;                rear++;            }            if(p->rchild)            {                Q[rear]=p->rchild;                rear++;            }        }    }    return NULL;}
0 0