二叉树

本文详细介绍了二叉树的链式存储方法,包括二叉树的基本定义、节点结构、初始化过程、创建与销毁等核心操作。同时,还探讨了如何通过递归方式创建二叉树,并提供了插入子树的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树的链式存储

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;
}




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值