用链表实现二叉树

来源:互联网 发布:淘宝速成教程 编辑:程序博客网 时间:2024/06/06 15:47





/*
实现功能:用链式表操作二叉树
编译环境: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;
}

0 0
原创粉丝点击