//算法与数据结构实验二-二叉树 by 022116213-CS
/*1. 设计一个程序,由给定的二叉树先序序列,建立其二叉链表存储结构,并求出二叉树的中序序列和后序序列。
2. 假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数。并设计主函数调用上述算法。*/
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXSIZE 100
using namespace std;
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
struct BiTNode* lchild, * rchild;
} BiTNode, * BiTree;
void InOrderTraverse1(BiTree T) {
//先序遍历
if (T) {
cout << T->data;
InOrderTraverse1(T->lchild);
InOrderTraverse1(T->rchild);
}}
void InOrderTraverse2(BiTree T) {
//中序遍历
if (T) {
InOrderTraverse2(T->lchild);
cout << T->data;
InOrderTraverse2(T->rchild);}
}
void InOrderTraverse3(BiTree T) {
//后序遍历
if (T) {
InOrderTraverse3(T->lchild);
InOrderTraverse3(T->rchild);
cout << T->data;}}
void CreateBiTree(BiTree& T) {//先序
char ch;
cin >> ch;
if (ch == '#')
T = NULL;
else {
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);}}
int Depth(BiTree T) {
int n, m;
if (T == NULL)
return 0;
else {
m = Depth(T->lchild);
n = Depth(T->rchild);
if (m > n)
return(m + 1);
else
return(n + 1);}}
int NodeCount(BiTree T) {
if (T == NULL)
return 0;
else
return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
int main()
{
BiTree a;
int height, num;
cout << "请输入二叉树的元素!\n";
CreateBiTree(a);
cout << "按先序遍历法输出该二叉树的元素为:\n";
InOrderTraverse1(a);
cout << "\n按中序遍历法输出该二叉树的元素为:\n";
InOrderTraverse2(a);
cout << "\n按后序遍历法输出该二叉树的元素为:\n";
InOrderTraverse3(a);
height = Depth(a);
num = NodeCount(a);
cout << "\n该二叉树高度为:";
cout << height << endl;
cout << "该二叉树结点数为:";
cout << num;
return 0;
}