这是完整的代码:
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
#pragma warning(disable:6385)
#pragma warning(disable:6386)
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node* lchild;
struct node* rchild;
}BTNode;
void CreateBTree(BTNode*& b, const char* str) //创建二叉树
{
BTNode* St[MaxSize], * p;
p = NULL;
int top = -1, k, j = 0; char ch;
b = 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 = (BTNode*)malloc(sizeof(BTNode));
p->data = ch; p->lchild = p->rchild = NULL;
if (b == NULL) //若b为空,p置为二叉树的根结点
b = p;
else //已建立二叉树根节点
{
switch (k)
{
case 1:St[top]->lchild = p; break;
case 2:St[top]->rchild = p; break;
}
}
}
j++; ch = str[j];
}
}
void FindMinNode(BTNode* b, char &min)
{
if (b->data < min)
min = b->data;
FindMinNode(b->lchild, min); //在左子树中找最小结点值
FindMinNode(b->rchild, min); //在右子树中找最小结点值
}
void MinNode(BTNode* b) //输出最小值结点
{
if (b != NULL)
{
char min = b->data;
FindMinNode(b, min);
printf("Min = %d\n", min);
}
}
int main()
{
BTNode* b, * p;
//char min;
CreateBTree(b,"8(7(6,5(3(2,),23(21,17(,12)))");
//FindMinNode(b, min);
//FindMinNode(b, min);
MinNode(b);
return 1;
}
运行后会出现报错: