用链表实现二叉树

这段代码展示了如何使用链式结构创建并操作二叉树。通过`createBinTree`函数创建根节点,`AppendChild`函数添加子节点,以及`leftChild_link`和`rightChild_link`函数获取左右子节点。在`main`函数中,创建了一个包含A、B、C、D、E、F、G、H、I、J节点的二叉树,并打印了右子节点的值。

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





/*
实现功能:用链式表操作二叉树
编译环境:Windows7 64b,vc6.0
日期:  2015/7/21
作者:  wtt561111
*/
/*
遇到的困难及解决办法


*/
#include "stdio.h"
#include "stdlib.h"
typedef struct BinTreeNode *PBinTreeNode;//方便理解为树节点
struct BinTreeNode{
PBinTreeNode llink;
PBinTreeNode rlink;
char info;
};
typedef struct BinTreeNode *PBinTree;//方便理解为树




/*
创建一个根节点内容为x的树,成功返回根节点,否则返回NULL
*/
PBinTree createBinTree(char x){


PBinTree pbt=(PBinTree)malloc(sizeof(struct BinTreeNode));
if(pbt==NULL){
printf("out of space\n");
return NULL;
}
pbt->info=x;
pbt->llink=NULL;
pbt->rlink=NULL;
return pbt;


}
/**************************************************************************/


/*
添加子节点,0表示左子结点,1表示右子结点。成功返回1,否则返回0
*/
int AppendChild(PBinTree t,int child,char childInfo){

PBinTreeNode ptn=(PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(ptn==NULL){
printf("out of space\n");
return 0;
}
ptn->info=childInfo;
ptn->llink=NULL;
ptn->rlink=NULL;
if(child==0){
t->llink=ptn;
return 1;
}else
if(child==1){
t->rlink=ptn;
return 1;
}else{
printf("请输入0:左子结点或者1:右子结点\n");
return 0;
}






}
/**************************************************************************/


/*
返回左子结点,成功返回子结点地址,否则返回NULL
*/
PBinTreeNode leftChild_link(PBinTree t){


if(t==NULL){
printf("empty tree\n");
return NULL;
}
return t->llink;


}


/**************************************************************************/




/*
返回右子结点,成功返回子结点地址,否则返回NULL
*/
PBinTreeNode rightChild_link(PBinTree t){


if(t==NULL){
printf("empty tree\n");
return NULL;
}
return t->rlink;


}


/**************************************************************************/




int main(){
char root_info='A';
PBinTree pbt_get=createBinTree(root_info);


AppendChild(pbt_get,0,'B');
AppendChild(pbt_get,1,'C');
AppendChild(pbt_get->llink,0,'D');
AppendChild(pbt_get->llink,1,'E');
AppendChild(pbt_get->rlink,0,'F');
AppendChild(pbt_get->rlink,1,'G');
AppendChild(pbt_get->llink->llink,0,'H');
AppendChild(pbt_get->llink->llink,1,'I');
AppendChild(pbt_get->llink->rlink,0,'J');
PBinTreeNode root_right=rightChild_link(pbt_get);
printf("%c\n",root_right->info);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值