3, 输出所给二叉树的全部结点,求二叉树的高度并输出,并按树状打印该二叉树*/
#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node *LChild;
struct Node *RChild;
}BiTNode, *BiTree;
void CreateBiTree(BiTree *bt)//创建二叉树
{
char ch;
ch = getchar();
if(ch=='#') *bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode)); //生成一个新结点
(*bt)->data=ch;
CreateBiTree(&((*bt)->LChild)); //生成左子树
CreateBiTree(&((*bt)->RChild)); //生成右子树
}
}
/*输出二叉树的结点*/
void InputOrder(BiTree root)
{
if(root!=NULL)
{
printf("%c", root->data);
InputOrder(root->LChild);
InputOrder(root->RChild);
}
}
//求二叉树的高度方法一
int GetHeight( BinTree root)
{
int HL,HR;
if(root!= NULL)
{
HL=GetHeight(root->Left);
HR=GetHeight(root->Right);
if(HL>=HR)
return HL+1;
else
return HR+1;
}
return 0;
}
/* 后序遍历求二叉树的高度递归算法 、方法二*/
int height(BiTree root)
{
int hl, hr, max;
if(root!=NULL)
{
hl = height(root->LChild);
hr = height(root->RChild);
max = hl > hr ? hl : hr;
return (max + 1);
}
else return 0;
}
/* 按树状打印的二叉树 */
void PrintTree(BiTree root,int n)
{
if(root==NULL)
return;
PrintTree(root->RChild,n+1);
for(int i = 0; i < n;i++)
printf(" ");
printf("%c\n", root->data);
PrintTree(root->LChild,n+1);
}
int main()
{
BiTree T;
int h,layer;
printf("按扩展先序遍历序列建立二叉树,请输入序列:\n");
CreateBiTree(&T);
printf("先序输出二叉树的结点为:");
InputOrder(T);
// h=height(T);
printf("\n二叉树的高度为:%d",height(T));
printf("\n");
PrintTree(T,0);
getch();
}