#include <bits/stdc++.h>
using namespace std;
int cnt,h;
typedef struct BinTreeNode *BinTree;
struct BinTreeNode
{
char Data;
BinTree Left;
BinTree Right;
};
void Creat(BinTree *MyTree)
{
char c;
cin >> c;
if(c != '#')
{
*MyTree = new BinTreeNode();
(*MyTree)->Data = c;
Creat(&(*MyTree)->Left);
Creat(&(*MyTree)->Right);
}else
{
*MyTree = NULL;
}
}
void PreOrder(BinTree MyTree)
{
if(MyTree)
{
printf("%c",MyTree->Data);
PreOrder(MyTree->Left);
PreOrder(MyTree->Right);
}
}
void InOrder(BinTree MyTree)
{
if(MyTree)
{
InOrder(MyTree->Left);
printf("%c",MyTree->Data);
InOrder(MyTree->Right);
}
}
void PostOrder(BinTree MyTree)
{
if(MyTree)
{
PostOrder(MyTree->Left);
PostOrder(MyTree->Right);
printf("%c",MyTree->Data);
}
}
void LevelOrder(BinTree MyTree)
{
queue<BinTree> Q;
BinTree T;
if(!MyTree)return;
Q.push(MyTree);
while(!Q.empty())
{
int Size = Q.size();
while(Size--){
T = Q.front();
Q.pop();
printf("%c",T->Data);
if(T->Left)Q.push(T->Left);
if(T->Right)Q.push(T->Right);
}
cout << endl;
}
}
void LeavesCount(BinTree MyTree)
{
if(MyTree)
{
if(!MyTree->Left && !MyTree->Right)
cnt++;
LeavesCount(MyTree->Left);
LeavesCount(MyTree->Right);
}
}
int GetHight(BinTree MyTree)
{
int HL,HR,MAX;
if(MyTree)
{
HL = GetHight(MyTree->Left);
HR = GetHight(MyTree->Right);
MAX = HL > HR?HL:HR;
return (MAX+1);
}
else return 0;
}
int main()
{
int n;
BinTree MyTree;
cin >> n;
Creat(&MyTree); //创建
printf("preorder traversal:");
PreOrder(MyTree); //前序
cout << endl;
printf("inorder traversal:");
InOrder(MyTree); //中序
cout << endl;
printf("postorder traversal:");
PostOrder(MyTree); //后序
cout << endl;
printf("level traversal:\n");
LevelOrder(MyTree); //层序
LeavesCount(MyTree);
cout << cnt << endl;
h = GetHight(MyTree);
cout << h;
return 0;
}
二叉树的前序、中序、后序、层序遍历以及高度、节点数
最新推荐文章于 2024-10-16 19:19:52 发布