二叉树的高度和结点没显示,求怎么解决????
#include <stdio.h>#include <Stdlib.h>
#include <string.h>
#include<iostream>
using namespace std;
typedef struct Node
{
char data;
struct Node *LeftChild;
struct Node *RightChild;
}BiTNode;
void Initiate(BiTNode **root)
{
*root=(BiTNode *)malloc(sizeof(BiTNode));
(*root)->LeftChild=NULL;
(*root)->RightChild=NULL;
}
void Visit(char item)
{
printf("%c",item);
}
void PreOrder(BiTNode *T,void Visit(char item))
{//先序
if(T!=NULL)
{
Visit(T->data);
PreOrder(T->LeftChild,Visit);
PreOrder(T->RightChild,Visit);
}
}
void InOrder(BiTNode *T,void Visit(char item))
{//中序
if(T!=NULL)
{
InOrder(T->LeftChild,Visit);
Visit(T->data);
InOrder(T->RightChild,Visit);
}
}
void PostOrder(BiTNode *T,void Visit(char item))
{//后序
if(T!=NULL)
{
PostOrder(T->LeftChild,Visit);
PostOrder(T->RightChild,Visit);
Visit(T->data);
}
}
BiTNode* CreatTree(char *pre,char *in,int len)
{//创建二叉树
char *p,*i;
int j=0; //j表示根节点在中序中的位置
BiTNode *T;
Initiate(&T);
T->data=pre[0];
if(len==0)return NULL;
while(j<len)
{
if(in[j]==pre[0])break;
j++;
}
p = pre+1; //确定左子树的先序序列指针
i= in; //确定左子树的中序序列指针
T->LeftChild=CreatTree(p,i,j); //递归生成左子树
p = pre+j+1; //确定右子树的先序序列指针
i = in+j+1; //确定右子树的中序序列指针
T->RightChild=CreatTree (p,i,len-j-1);//递归生成右子树
return T;
}
int gethigh(BiTNode *T)
{
int m,l;
if(!T)
return 0;
else
{ m=gethigh(T->LeftChild);
l=gethigh(T->RightChild);
return (m>l)?(m+1):(l+1);
}
}
int coutnode(BiTNode *T)
{
int a;
if(!T)
return 0;
else
a=coutnode(T->LeftChild)+coutnode(T->RightChild)+1;
return a;
}
int main()
{
BiTNode *T;
int len;
char Pre[100];
char In[100];
printf("请输入前序序列:");
scanf("%s",&Pre);
printf("请输入中序序列:");
scanf("%s",&In);
len=strlen(In);
Initiate(&T);
T=CreatTree(Pre,In,len);
printf("二叉树构造成功!\n");
printf("\n后序序列:");
PostOrder(T,Visit);
printf("\n");
printf("树的高度:\n");
gethigh(T);
printf("树的结点:\n");
coutnode(T);
printf("\n");
return 0;
}