显示T是nullptr 麻烦大神们帮我看看,十分感谢
#include "stdafx.h"
#include
#include
#include
typedef int Status;
typedef int ElemType;
typedef struct bnode{ ElemType data; //数据域
struct bnode *LC, *RC;//左右子树域
}bnode, *btree;
void printtree(btree T, int nlayer)
{
if (T==NULL)
return printtree(T->RC, nlayer + 1);
for (int i=0;i
{ printf(" "); }
printf("%d\n",T->data);
printtree (T->LC,nlayer+1);
}
int InsertBST(btree &T, int key)
{
if(T==NULL)
{
T=(btree)malloc(sizeof(bnode));
T->data=key;
T->LC=T->RC=NULL;
return 1; }
else if(key data)
{ InsertBST(T->LC,key);
} else if(key >T->data)
{
InsertBST(T->RC,key);
}
else
return 0; } //插入二叉树函数
int Delete(btree &T) {
btree q,s;
if (!(T)->RC) { //右子树为空重接它的左子树
q=T;
T = (T)->LC;
free(q);
}
else
{
if(!(T)->LC){ //若左子树空则重新接它的右子树
q=T; T=(T)->RC; }
else{
q=T;
s=(T)->LC;
while(s->RC){
q=s;
s=s->RC; }
(T)->data=s->data; //s指向被删除结点的前驱
if(q!=T)
q->RC=s->LC;
else q->RC=s->LC;
free(s); } }
return 1; }
int PosttreeDepth(btree T) {
int hr,hl,max;
if(!T==NULL){ hl=PosttreeDepth(T->LC);
hr=PosttreeDepth(T->RC);
max=hl>hr?hl:hr;
return max+1; }
else
return 0; } //求深度
int DeleteBST(btree &T,int key)
{
if (!T)
return 0;
else{
if (key == (T)->data)
return Delete(T);
else {
if (key < (T)->data)
return DeleteBST(T->LC, key);
else
return DeleteBST(T->RC, key);
}
}
}
void preorder(btree root)
{
btree p = root;
btree stack[50];
int num = 0;
while (NULL != p || num>0)
{
while (NULL != p)
{
printf("%d ", p->data);
stack[num++] = p;
p = p->LC;
}
num--;
p = stack[num];
p = p->RC;
}
printf("\n");
}//先序非递归遍历
void inorder(btree root)
{ btree p=root;
int num = 0;
btree stack[50];
while (NULL != p || num>0)
{ while (NULL != p) { stack[num++] = p;
p = p->LC; }
num--;
p = stack[num];
printf("%d ", p->data);
p = p->RC;
}
printf("\n");
} //中序非递归遍历
void postorder(btree root)
{
btree p = root;
btree stack[50];
int num = 0;
btree have_visited = NULL;
while (NULL != p || num > 0)
{
while (NULL != p)
{
stack[num++] = p;
p = p->LC;
}
p = stack[num - 1];
if (NULL == p->RC || have_visited == p->RC)
{
printf("%d ", p->data);
num--;
have_visited = p;
p = NULL;
}
else { p = p->RC; }
}
printf("\n");
}//后序非递归遍历
btree CreateBST(int a[], int n)
{
btree bst=NULL;
int i=0;
while(i<n){
InsertBST(bst,a[i]);
i++;
} return bst;
}//创建二叉树函数
int main()
{
printf("---------------------二叉排序树的实现-------------------");
printf("\n");
int layer;
int i;
int num;
printf("输入节点个数:");
scanf ("%d",&num);
printf("依次输入这些整数(要不相等)");
int *arr = (int*)malloc(num * sizeof(int));
for (i=0;i<num;i++)
{
scanf ("%d",arr+i);
}
btree bst=CreateBST(arr,num);
printf("\n");
printf("二叉树创建成功!");
printf("\n");
layer=PosttreeDepth(bst);
printf("树状图为:\n");
printtree(bst, layer);
printf("非递归遍历二叉树");
printf("先序遍历:\n");
preorder(bst);
printf("中序遍历:\n");
inorder(bst);
printf("后序遍历:\n");
postorder(bst);
printf("树状图为:\n");
printtree(bst, layer);
return 0; }