关于创建二叉树遍历它的问题
代码如下:
#include<iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode * lchild;
struct BiTNode * rchild;
};
void Create(struct BiTNode *&T)
{
char ch;
cin>>ch;
if(ch == '@')
T = NULL;
else
{
T = new BiTNode;?
T->data = ch;
Create(T->lchild );
Create(T->rchild );
}
}
void InOrder(struct BiTNode *T)
{
if(T!=NULL)
{
InOrder(T->lchild );
cout<<T->data <<endl;
InOrder(T->rchild );
}
}
int main(void)
{
? //BiTNode *T = (BiTNode*)malloc(sizeof(BiTNode));
? BiTNode *T;
cout<<"请输入节点内容:\n"<<endl;
? Create(T);
InOrder(T);
system("pause");
return 0;
}
第一个问题:这样不报错,咋就是没法把遍历后的打印出来恁?
第二个问题:我屏蔽的那句话错在哪啊?
第三个问题:struct BiTNode *&T,这看不懂,有木有什么教材啥的分享给我看看指
[解决办法]
第一个问题:可以打印出来的。我估计是你不会正确的输入。
第二格问题:那句话没有什么错误,不过由于你的节点是在Create函数中创建的,所以只需要传递一个BiTNode的指针进去就可以了。
第三个问题:这个语句的意思是:T是结构体BiTNode指针的引用。
你没有学过C的话就先去看看基础的C教材吧。
[解决办法]
看来楼主对指针的引用还木有理解清楚,偶帮你修改了一下这样是可以的。。
- C/C++ code
#include<iostream>using namespace std;//二叉树结点的描述typedef struct BiTNode{ char data; struct BiTNode *lchild, *rchild; //左右孩子}BiTNode,*BiTree;void CreateBiTree(BiTNode* &T) //引用类型的参数{ char ch; //要插入的数据 cin>>ch; if(ch=='#') T = NULL; else { T = new BiTNode; T->data = ch; printf("请输入%c的左孩子:",ch); CreateBiTree(T->lchild); printf("请输入%c的右孩子:",ch); CreateBiTree(T->rchild); }}//中序遍历的算法程序void InOrder(BiTNode *T){ if(T == NULL) return ; InOrder(T->lchild); //递归调用,前序遍历左子树 cout<<T->data<<" "; InOrder(T->rchild); //递归调用,前序遍历右子树}int main(void){ BiTNode *root=NULL; //定义一个根结点 CreateBiTree(root); InOrder(root); cout<<endl; system("pause"); return 0;}