#include<cstdio> #include<cstdlib> #include<iostream> using namespace std; typedef struct Node { int data; Node *lchild, *rchild; }BiNode, *BiTree; BiTree Creat_Tree() { BiTree root=NULL; int data; int key; char flag; scanf("%d",&data); while(data!=flag) { BiTree pa,ptr,p; p=root; ptr=(BiTree)malloc(sizeof(BiNode)); ptr->data=key; ptr->lchild=NULL; ptr->rchild=NULL; pa=NULL; if(p==NULL) return ptr; else { while(p!=NULL) { pa=p; if(key<=p->data) p=p->lchild; else p=p->rchild; } if(key<=pa->data) pa->lchild=ptr; else pa->rchild=ptr; } return root; } return root; } void PreOrder(BiTree root) { if(root!=NULL) { printf("%d ",root->data); PreOrder(root->lchild); PreOrder(root->rchild); } }int main() { BiTree root ; root = Creat_Tree(); PreOrder(root); printf("\n");}以上代码输出存在错误应当如何进行修改
时间: 2024-02-14 14:07:46 浏览: 146
代码存在以下问题:
1. 变量 `key` 没有被赋值,应该将 `scanf("%d", &data)` 修改为 `scanf("%d", &key)`。
2. `flag` 没有被初始化,可能会导致程序出现不可预期的错误,可以将 `char flag` 修改为 `char flag = '0'`。
3. `return root;` 语句放在了 while 循环内部,导致程序只会执行一次 while 循环并返回根节点,需要将其放在 while 循环外部。
修改后的代码如下所示:
```c++
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
typedef struct Node {
int data;
Node *lchild, *rchild;
} BiNode, *BiTree;
BiTree Creat_Tree() {
BiTree root = NULL;
int data;
int key;
char flag = '0';
scanf("%d", &data);
while (data != flag) {
BiTree pa, ptr, p;
p = root;
ptr = (BiTree)malloc(sizeof(BiNode));
key = data; // 修改此处,将 data 修改为 key
ptr->data = key;
ptr->lchild = NULL;
ptr->rchild = NULL;
pa = NULL;
if (p == NULL)
root = ptr;
else {
while (p != NULL) {
pa = p;
if (key <= p->data)
p = p->lchild;
else
p = p->rchild;
}
if (key <= pa->data)
pa->lchild = ptr;
else
pa->rchild = ptr;
}
scanf("%d", &data); // 读取下一个节点的值
}
return root;
}
void PreOrder(BiTree root) {
if (root != NULL) {
printf("%d ", root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
int main() {
BiTree root;
root = Creat_Tree();
PreOrder(root);
printf("\n");
return 0;
}
```
修改后的代码应该可以正确输出二叉树的前序遍历序列了。
阅读全文