数据结构实验之二叉树的建立与遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入
输出
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfacgefdba35
心得:一道不错的题目,不难但考察了不少二叉树的知识。。
代码:
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
struct node
{
char data;
struct node *l,*r;
};
struct node *create(struct node *p)
{
char c;
cin>>c;
if(c==',')p=NULL;
else
{
p=(struct node *)malloc(sizeof(struct node));
p->data=c;
p->l=create(p->l);
p->r=create(p->r);
}
return p;
};
void inorder(struct node *p)
{
if(p)
{
inorder(p->l);
cout<<p->data;
inorder(p->r);
}
}
void lastorder(struct node *p)
{
if(p)
{
lastorder(p->l);
lastorder(p->r);
cout<<p->data;
}
}
int num=0;
void yezi(struct node *p)
{
if(p)
{
if(p->l==NULL&&p->r==NULL)
num++;
else
{
yezi(p->l);
yezi(p->r);
}
}
}
int deep(struct node *p)
{
int ld=0,rd=0;
if(p==NULL) return 0;
else
{
ld=deep(p->l);
rd=deep(p->r);
if(ld>rd) return ld+1;
else return rd+1;
}
}
int main()
{
struct node *p;
p=create(p);
inorder(p);
cout<<endl;
lastorder(p);
cout<<endl;
yezi(p);
cout<<num<<endl;
int depth=deep(p);
cout << depth<< endl;
return 0;
}