主题:帮忙看看!救命啊.冰天雪地祼体跪求啊
二、2叉树的基本操作
0.建立二叉树
1.先序递归遍历形式
2.先序非递归遍历形式(可选)
3.中序递归遍历形式
4.中序非递归遍历形式(可选)
5.后序递归遍历形式
6.后序非递归遍历形式(可选)
7.计算所有结点个数
8.计算叶子结点个数
9.计算树的深度
10.查到相同的元素
11.推出
下面编的对吗?剩下怎么编啊!
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct btnode
{
char data;
struct btnode *lchild,*rchild;
}btnode;
btnode *t;
int leaves=0;
btnode *create (btnode *p)
{ char ch;
if ((ch=getchar())=='#')
p=NULL;
else
{
p=(btnode *)malloc(sizeof(btnode));
p->data=ch;
p->lchild=create(p->lchild);
p->rchild=create(p->rchild);
}
return p;
}
void preorder(struct btnode *p)
{
if(p!=NULL)
{printf("%2c",p->data);
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(struct btnode *p)
{
if(p!=NULL)
{
inorder(p->lchild);
printf("%2c",p->data);
inorder(p->rchild);
}
}
void lastorder(struct btnode *p)
{if(p!=NULL)
{
lastorder(p->lchild);
lastorder(p->rchild);
printf("%2c",p->data);
}
}
int nodes( struct btnode *p)
{
int node=0;
if(p==NULL)
node=0;
else
node=1+nodes(p->lchild)+nodes(p->rchild);
return(node);
}
int leaf(struct btnode *t)
{
if(t)
{
leaf(t->lchild);
if(!(t->lchild||t->rchild))
leaves++;
leaf(t->rchild);
}
return leaves;
}
void main()
{
btnode *s,*bt;
int nodenum,leafnum;
//clrscr();
s=NULL;
printf("please input node:\n");
bt=create(s);
printf("preorder:\n");
preorder(bt);
printf("\n");
printf("inorder:\n");
inorder(bt);
printf("\n");
printf("lastorder:\n");
lastorder(bt);
printf("\n");
nodenum=nodes(bt);
printf("nodenum=%d\n",nodenum);
leafnum=leaf(bt);
printf("leafnum=%d\n",leafnum);
}
0.建立二叉树
1.先序递归遍历形式
2.先序非递归遍历形式(可选)
3.中序递归遍历形式
4.中序非递归遍历形式(可选)
5.后序递归遍历形式
6.后序非递归遍历形式(可选)
7.计算所有结点个数
8.计算叶子结点个数
9.计算树的深度
10.查到相同的元素
11.推出
下面编的对吗?剩下怎么编啊!
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct btnode
{
char data;
struct btnode *lchild,*rchild;
}btnode;
btnode *t;
int leaves=0;
btnode *create (btnode *p)
{ char ch;
if ((ch=getchar())=='#')
p=NULL;
else
{
p=(btnode *)malloc(sizeof(btnode));
p->data=ch;
p->lchild=create(p->lchild);
p->rchild=create(p->rchild);
}
return p;
}
void preorder(struct btnode *p)
{
if(p!=NULL)
{printf("%2c",p->data);
preorder(p->lchild);
preorder(p->rchild);
}
}
void inorder(struct btnode *p)
{
if(p!=NULL)
{
inorder(p->lchild);
printf("%2c",p->data);
inorder(p->rchild);
}
}
void lastorder(struct btnode *p)
{if(p!=NULL)
{
lastorder(p->lchild);
lastorder(p->rchild);
printf("%2c",p->data);
}
}
int nodes( struct btnode *p)
{
int node=0;
if(p==NULL)
node=0;
else
node=1+nodes(p->lchild)+nodes(p->rchild);
return(node);
}
int leaf(struct btnode *t)
{
if(t)
{
leaf(t->lchild);
if(!(t->lchild||t->rchild))
leaves++;
leaf(t->rchild);
}
return leaves;
}
void main()
{
btnode *s,*bt;
int nodenum,leafnum;
//clrscr();
s=NULL;
printf("please input node:\n");
bt=create(s);
printf("preorder:\n");
preorder(bt);
printf("\n");
printf("inorder:\n");
inorder(bt);
printf("\n");
printf("lastorder:\n");
lastorder(bt);
printf("\n");
nodenum=nodes(bt);
printf("nodenum=%d\n",nodenum);
leafnum=leaf(bt);
printf("leafnum=%d\n",leafnum);
}