您的位置:首页 > 理论基础 > 数据结构算法

[SDUT](2136)数据结构实验之二叉树的建立与遍历 ---- 二叉树

2017-11-12 20:40 615 查看
Problem Description

已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

Input

输入一个长度小于50个字符的字符串。

Output

输出共有4行:

第1行输出中序遍历序列;

第2行输出后序遍历序列;

第3行输出叶子节点个数;

第4行输出二叉树深度。

Example Input

abc,,de,g,,f,,,

Example Output

cbegdfa

cgefdba

3

5

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
struct Node *lchild,*rchild;
char data;
}node;
char tr[55];
int i;
int sum = 0;
node *creatTree()
{
node *tmp;
if(tr[i] == ',')
{
tmp = NULL;
i++;
}
else
{
tmp = (node *)malloc(sizeof(node));
tmp->data = tr[i];
i++;
tmp->lchild = creatTree();
tmp->rchild = creatTree();
}
return tmp;
}
void InOrder(node *t)
{
if(t!=NULL)
{
InOrder(t->lchild);
cout<<t->data;
InOrder(t->rchild);
}
}
void PostOrder(node *t)
{
if(t!=NULL)
{
PostOrder(t->lchild);
PostOrder(t->rchild);
cout<<t->data;
}
}
void Leaf(node *t) //求叶子节点个数
{
if(t == NULL)
return;
else
{
if(t->lchild == NULL && t->rchild == NULL)
sum++;
Leaf(t->lchild);
Leaf(t->rchild);
}
}
int Height(node *t) //求二叉树深度
{
int left;
int right;
if(t == NULL)
return 0;
else
{
left = Height(t->lchild);
right = Height(t->rchild);
return (left>right)?(left+1):(right+1);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
i = 0;
cin>>tr;
node *root = creatTree();
InOrder(root);
cout<<endl;
PostOrder(root);
cout<<endl;
Leaf(root);
cout<<sum<<endl;
cout<<Height(root)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: