读书人

哪位高手能帮小弟我看看这段程序错在什

发布时间: 2013-04-20 19:43:01 作者: rapoo

谁能帮我看看这段程序错在什么地方了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义二叉树节点
typedef struct BTNode{
char data;
struct BTNode *rchild,*lchild;
}BTNode,*BTtree;

BTtree createBTNode(BTtree ptr, char value, char child){
//创建子节点
BTtree ptemp = (BTtree)malloc(sizeof(BTNode));
if(NULL == ptemp){
puts("创建子节点失败!");
exit(1);
}
ptemp->data = value;
ptemp->rchild = NULL;
ptemp->lchild = NULL;
if(child == 'R'){
ptr->rchild = ptemp;
}else if(child == 'L'){
ptr->lchild == ptemp;
}
return ptemp;

}

BTtree initBTree(){
//首先创建根节点
BTtree root = (BTtree)malloc(sizeof(BTNode));
if(root == NULL){
puts("根节点创建失败");
exit(1);
}
root->data = 'A';
root->rchild = NULL;
root->lchild = NULL;
BTtree pb = createBTNode(root,'B','L');
BTtree pc = createBTNode(root,'C','R');
BTtree pd = createBTNode(pb,'D','L');
BTtree pe = createBTNode(pb,'E','R');
BTtree pf = createBTNode(pc,'F','L');
BTtree pg = createBTNode(pc,'G','R');
return root;
}
//对二叉树进行先序遍历

void preorder(BTtree p){
if(p != NULL){
printf("%c ",p->data);
preorder(p->lchild); //先序遍历左子树
preorder(p->rchild);//先序遍历右子树
}
}
void inorder(BTtree p){
if(p != NULL){
inorder(p->lchild);
printf("%c ",p->data);
inorder(p->rchild);
}
}
void postorder(BTtree p){
if(p != NULL){
postorder(p->lchild);
postorder(p->rchild);
printf("%c ",p->data);
}
}
int main(){
BTtree btroot = initBTree();
//printf("%c\n",btroot->data);
printf("先序遍历:\n");
preorder(btroot);
printf("\n中序遍历:\n");
inorder(btroot);
printf("\n后序遍历:\n");
postorder(btroot);
return 0;
}
打印结果:
先序遍历:
A C G
中序遍历:
A C G
后序遍历:
G C A

其他节点怎么找不到呢? C 遍历 二叉树
[解决办法]
单步调试和设断点调试是程序员必须掌握的技能之一。

[解决办法]

BTtree createBTNode(BTtree ptr, char value, char child){
//创建子节点
BTtree ptemp = (BTtree)malloc(sizeof(BTNode));
if(NULL == ptemp){
puts("创建子节点失败!");
exit(1);
}
ptemp->data = value;
ptemp->rchild = NULL;
ptemp->lchild = NULL;
if(child == 'R'){
ptr->rchild = ptemp;
}else if(child == 'L'){
ptr->lchild == ptemp;//改为=
}
return ptemp;

}

读书人网 >C语言

热点推荐