创建二叉树。 #include<iostream> using namespace std; typedef struct BiNode{ char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; void CreateBiTree(){ char ch; cin >> ch; if(ch=='#') T=NULL; else{ T=new BiTNode; T->data=ch; CreateBiTree(T->lchild) ; CreateBiTree(T->rchild) ; } } void InOrderTraverse(BiTree T){ if(T){ InOrderTraverse(T->lchild); cout << T->data; InOrderTraverse(T->rchild); } } int main(){ BiTree tree; CreateBiTree(tree); InOrderTraverse(tree); return 0; }
时间: 2024-01-25 18:02:15 浏览: 36
您的代码中的 CreateBiTree 函数有问题。它没有传入二叉树的指针,无法对其进行操作。建议将函数修改为:
```
void CreateBiTree(BiTree &T){
char ch;
cin >> ch;
if(ch=='#')
T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
```
这里我们将二叉树的指针作为参数传入,同时使用引用传递,这样就可以对其进行操作了。
另外,还有一个问题是在 main 函数中调用 CreateBiTree 函数时没有传入参数。建议修改为:
```
int main(){
BiTree tree = NULL;
CreateBiTree(tree);
InOrderTraverse(tree);
return 0;
}
```
这样就可以正常运行程序了。
相关问题
#include<iostream> using namespace std; typedef struct BiNode { char data; struct BiNode* lchild, * rchild; }BiTNode, * BiTree; void CreateBiTree(BiTree& T) { char ch; cin >> ch; if (ch == '#') T = NULL; else { T = new BiTNode; T->data = ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } }
这段代码是用来创建二叉树的,其中使用了递归的方式。具体来说,它使用了一个结构体 BiNode 来表示二叉树的节点,其中包含了一个数据成员 data 和两个指向左右子树的指针 lchild 和 rchild。接下来是一个函数 CreateBiTree,它的参数是一个指向二叉树根节点的指针 T,函数的作用是根据用户输入的字符来创建二叉树。如果输入的字符是 '#',则将当前节点的左右子树指针都设为 NULL,否则创建一个新节点,并将当前字符赋给它的 data 成员,然后递归调用 CreateBiTree 来分别创建它的左右子树。
#include<iostream> using namespace std; typedef struct BiTNode { int data; int cnt; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int sum=0; //全局变量sum表示排序树当前结点的个数,也为了判断数据是否为输出的最后一个数 void SearchBST(BiTree &T,int x) {//基于非递归的二叉排序树的结点的查找和插入 } void InOrderTraverse(BiTree T) {//中序遍历输出二叉树T结点 } void Print_Count(BiTree T,int x) {//中序遍历输出二叉树T计数 },补充我的代码
以下是补充完整的代码,其中包括了基于非递归的二叉排序树的结点的查找和插入、中序遍历输出二叉树结点以及中序遍历输出二叉树计数的实现。你可以根据自己的需求进行调整。
```
#include<iostream>
using namespace std;
typedef struct BiTNode {
int data;
int cnt;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int sum=0; //全局变量sum表示排序树当前结点的个数,也为了判断数据是否为输出的最后一个数
void SearchBST(BiTree &T,int x) {//基于非递归的二叉排序树的结点的查找和插入
if(T==NULL) {//如果根节点为空,则新建节点作为根节点
T=new BiTNode;
T->data=x;
T->cnt=1;
T->lchild=NULL;
T->rchild=NULL;
} else {//否则遍历树,找到合适的位置进行插入或计数
BiTree p=T;
while(p!=NULL) {
if(p->data==x) {
p->cnt++;
break;
} else if(p->data>x) {
if(p->lchild==NULL) {
BiTree q=new BiTNode;
q->data=x;
q->cnt=1;
q->lchild=NULL;
q->rchild=NULL;
p->lchild=q;
break;
} else {
p=p->lchild;
}
} else {
if(p->rchild==NULL) {
BiTree q=new BiTNode;
q->data=x;
q->cnt=1;
q->lchild=NULL;
q->rchild=NULL;
p->rchild=q;
break;
} else {
p=p->rchild;
}
}
}
}
}
void InOrderTraverse(BiTree T) {//中序遍历输出二叉树T结点
if(T==NULL) {
return;
}
InOrderTraverse(T->lchild);
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
void Print_Count(BiTree T,int x) {//中序遍历输出二叉树T计数
if(T==NULL) {
return;
}
Print_Count(T->lchild,x);
if(T->data==x) {
cout<<T->cnt<<endl;
sum++;
}
if(sum==T->cnt) {//判断数据是否为输出的最后一个数
return;
}
Print_Count(T->rchild,x);
}
int main() {
BiTree T=NULL;//初始化二叉排序树
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) {
int x;
cin>>x;
SearchBST(T,x);//向二叉排序树中插入数据
}
InOrderTraverse(T);//中序遍历输出二叉树结点
cout<<endl;
for(int i=0;i<m;i++) {
int x;
cin>>x;
sum=0;//初始化sum
Print_Count(T,x);//中序遍历输出数据x的计数
}
return 0;
}
```