二叉树课程设计
PreOrder(T->Rlink);
}
}
//ÖÐÐò±éÀú¶þ²æÊ÷
void InOrder(btreetype T)
{
if(T){
InOrder(T->Llink);
printf("%c",T->Data);
InOrder(T->Rlink);
}
}
//ºóÐò±éÀú¶þ²æÊ÷
void PostOrder(btreetype T){
btreetype T;
InitBiTree(T);
CreatBiTree(T);
printf("À¨ºÅ±íʾ·¨Êä³ö¶þ²æÊ÷:\n");
DispBiTree(T);
printf("\n");
LeftChild(T,'H');
RightChild(T,'H');
m=LeafPoint(T);printf("ÓÐ%d¸öÒ¶×Ó½áµã\n",m);
if(T){
PostOrder(T->Llink);
PostOrder(T->Rlink);
printf("%c",T->Data);
}
}
void main()
{timeb t1,t2;ftime(&t1);
long t;int m,n;
printf("ÃâÔðÉùÃ÷£º\n\tÓÉÓÚ±¾È˵çÄÔϵµÂÓïÊäÈë·¨£¬ÎÞ·¨ÔÚÔËÐÐʱÊäÈë'#'×Ö·ûºÅ£¬¹Ê¸ÄΪ¿Õ¸ñ´úÌæ\n");
RightChild(p->Llink,e);
RightChild(p->Rlink,e);}
}
//ͳ¼ÆÒ¶×Ó½áµã¸öÊý
int LeafPoint(btreetype t)
{
if(!t)
return 0;
else
if(!t->Llink&&!t->Rlink)
return 1;
else
return (LeafPoint(t->Llink) + LeafPoint(t->Rlink));
实验6.1实现二叉树各种基本运算的算法
编写一个程序algo6-1.cpp,实现二叉树的各种运算,并在此基础上设计一个主程序完成如下功能(T为如图所示的一棵二叉树):
(1)以括号表示法输出二叉树T。
(2)输出H结点的左、右孩子结点值。
(3)输出二叉树T的叶子结点个数。
(4)输出二叉树T的深度。
(5)输出对二叉树T的先序遍历序列。
CreatBiTree(T->Rlink);
}
}
//Êä³ö½áµãµÄ×óº¢×Ó
void LeftChild(btreetype &M,char e)
{
btreetype p;
p=M;
if(p!=NULL)
{if(p->Data==e)
{printf("%cµÄ×óº¢×ÓÊÇ%c\n",e,p->Llink->Data);}
if (T->Rlink!=NULL)printf(",");
DispBiTree(T->Rlink);
printf(")");
}
}
}
//ÏÈÐò±éÀú¶þ²æÊ÷
void PreOrder(btreetype T)
{
if(T){
printf("%c",T->Data);
PreOrder(T->Llink);
void CreatBiTree(btreetype &T)
{char ch;
scanf("%c",&ch);
if(ch==' ')T=NULL;
else
{
T=(btreetype)malloc(sizeof(btnode));
if(!T)exit(-1);
T->Data=ch;
CreatBiTree(T->Llink);
}
//À¨ºÅ±íʾ·¨Êä³ö¶þ²æÊ÷
void DispBiTree(btreetype T)
{
if (T!=NULL)
{
printf("%c",T->Data);
if (T->Llink!=NULL||T->Rlink!=NULL)
{
printf("(");
DispBiTree(T->Llink);
程序段
#include<stdio.h>
#include<stdlib.h>
#include<sys/timeb.h>
//#define MAX 50
#define OK 1
//¶þ²æÊ÷Á´±í´æ´¢½á¹¹
typedef struct btnode
{
char Data;//½áµãÊý¾ÝÄÚÈÝ
n=Depth(T);printf("¶þ²æÊ÷µÄ源自î¶ÈÊÇ%d\n",n);
printf("ÏÈÐò±éÀú¶þ²æÊ÷:");
PreOrder(T);
printf("\n");
printf("ÖÐÐò±éÀú¶þ²æÊ÷:");
}
//¶þ²æÊ÷Éî¶È
int Depth(btreetype T)
{
int i,j;
if(!T)return 0;
if(T->Llink)
i=Depth(T->Llink);
else i=0;
if(T->Rlink)
j=Depth(T->Rlink);
else j=0;
return i>j?i+1:j+1;
(6)输出对二叉树T的中序遍历序列。
(7)输出对二叉树T的后序遍历序列。
提示:创建二叉树的算法参见书上131页的算法6.4。按先序序列输入二叉树中结点的值(一个字符),#字符表示空树。输入序列:
ABD##EHJ##KL##M#N###CF##G#I##
以括号表示法输出二叉树的结果为:
A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))
struct btnode *Llink;//×ó×ÓÊ÷Ö¸Õë
struct btnode *Rlink;//ÓÒ×ÓÊ÷Ö¸Õë
}btnode,*btreetype;
//¹¹Ôì¿Õ¶þ²æÊ÷
int InitBiTree(btreetype &T)
{
T=NULL;
return OK;
}
//½¨Á¢¶þ²æÊ÷
LeftChild(p->Llink,e);
LeftChild(p->Rlink,e);}
}
//Êä³ö½áµãµÄÓÒº¢×Ó
void RightChild(btreetype &M,char e)
{
btreetype p;
p=M;
if(p!=NULL)
{if(p->Data==e)
{printf("%cµÄÓÒº¢×ÓÊÇ%c\n",e,p->Rlink->Data);}