先序递归创建二叉树的问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 12:45:55
#include<iostream>
#define NULL 0
using namespace std;
typedef struct node
{
char data;
struct node *lc,*rc;
}btnode;

void creattree(btnode *&t,char *p)
{
if(*p=='#') t=NULL;
else
{
t=new btnode;
t->data=*p;
creattree(*&t->lc,p++);
creattree(*&t->rc,p++);
}

}

void preorder(btnode *t)
{
if(t)
{
cout<<t->data;
preorder(t->lc);
preorder(t->rc);
}
}

void main()
{
btnode *t;
char a[]={"abd##ehj##kl##m#n###cf##g#i##0"};
char *p=a;
creattree(t,p);
preorder(t);
}
请问我这个程序那里有问题,语法检查没有错误。我觉得唯一的问题是当递归调用creattree()函数的时候,p++会不会使指针p向前移一个单位?如果不会,应该怎样该。
谢谢!
请问ivaniren您回答之前有没有运行过啊?*root=t这条语句分明就是错的,t指针都没有指向确定的值,你叫root指向哪里?而且,根指针当然是还是t,因为递归运行到最后会回到递归栈的栈底,也就是t是根指针的时候。

if(*p=='#') t=NULL; 问题在这
根节点得用一个指针保存 你用t申请节点 根就丢了!
申请节点时应使用一个临时指针 再将给节点添加到树上。

那你建立之后 根哪里去了? 还是t吗!
而且字符指针传递也是错误的应该是++p!不然树的节点全是a
要么你就这样
void main()
{
btnode *t,*root=t;
char a[]={"abd##ehj##kl##m#n###cf##g#i##0"};
char *p=a;
creattree(t,p);
preorder(root);
}