这段代码的问题在于没有正确处理输入数据和输出结果的部分。具体来说:
- 在创建二叉树时,应该将字符串作为函数参数传入,而不是使用
cin输入。例如:CreateBTree(b, tree);。 - 在显示结果时,没有换行符或其他分隔符来区分不同的输出。你可以在打印结果后添加一个换行符
cout << endl;来使输出更清晰。
除此之外,代码中还存在一些潜在的问题:
- 代码中并未检查输入数据是否合法,在读取字符数组和处理字符时应该增加适当的判断条件。
- 没有对动态内存进行正确释放,在销毁二叉树时应使用
delete关键字代替free()函数。
修复上述问题后,可以参考下面的修改版本:
#include <iostream>
using namespace std;
#define MaxSize 100
typedef char ElemType;
// 在此处补充你的代码
typedef struct tnode
{
ElemType data;
struct tnode *lchild, *rchild;
} BTNode;
//建立二叉树
void CreateBTree(BTNode *&bt, const char *str) //由括号表示串创建二叉链
{
BTNode *St[MaxSize], *p = NULL;
int top = -1, k, j = 0;
char ch;
bt = NULL; //建立的二叉树初始时为空
ch = str[j];
while (ch != '\0') //str未扫描完时循环
{
switch (ch)
{
case '(':
top++;
St[top] = p;
k = 1;
break; //为左孩子结点
case ')':
top--;
break;
case ',':
k = 2;
break; //为右孩子结点
default:
p = new BTNode();
p->data = ch;
p->lchild = p->rchild = NULL;
if (bt == NULL) //*p为二叉树的根结点
bt = p;
else //已建立二叉树根结点
{
switch (k)
{
case 1:
St[top]->lchild = p;
break;
case 2:
St[top]->rchild = p;
break;
}
}
}
j++;
ch = str[j];
}
}
//销毁二叉树
void DestroyBTree(BTNode *&bt)
{
if (bt != NULL)
{
DestroyBTree(bt->lchild);
DestroyBTree(bt->rchild);
delete bt;
}
}
//以括号法表示法输出二叉树
void DispBTree(BTNode *bt)
{
if (bt != NULL)
{
cout << bt->data;
if (bt->lchild != NULL || bt->rchild != NULL)
{
cout << "(";
DispBTree(bt->lchild);
if (bt->rchild != NULL)
cout << ",";
DispBTree(bt->rchild);
cout << ")";
}
}
}
void FindParent(BTNode *bt, char x, BTNode *&p)
{
if (bt != NULL)
{
if (bt->data == x)
p = NULL;
else if (bt->lchild != NULL && bt->lchild->data == x)
p = bt;
else if (bt->rchild != NULL && bt->rchild->data == x)
p = bt;
else
{
FindParent(bt->lchild, x, p);
if (p == NULL)
FindParent(bt->rchild, x, p);
}
}
else
p = NULL;
}
void display(BTNode *bt, char x)
{
BTNode *p;
FindParent(bt, x, p);
if (p != NULL)
{
cout << p->data;
cout << endl; // 输出换行符
}
}
int main()
{
BTNode *b, *p;
char tree[MaxSize];
cin.getline(tree, MaxSize); // 通过 getline 获取一行字符串
CreateBTree(b, tree);
char k;
cin >> k;
display(b,k);
DestroyBTree(b);
return 0;
}
希望以上回答能帮助到你!如果还有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问




