文章标题

来源:互联网 发布:程序员个人简历范文 编辑:程序博客网 时间:2024/06/11 22:55

typedef struct Node
{
//定义二叉树
char data;
struct Node * LChild;
struct Node * RChild;

}BiTNode, *BiTree;

void CreateBiTree(BiTree * bt)
{
//先序便利创建二叉链表
char ch;
ch=getchar();
if(ch==’.’)
*bt=NULL;
else
{
* bt = (BiTree)malloc(sizeof(BiTNode));
(* bt)->data=ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}

void PreOrder(BiTree root)
/* 先序遍历输出二叉树结点, root为指向二叉树根结点的指针 */
{
if (root!=NULL)
{
printf(” %c “,root->data); /* 输出根结点 */
PreOrder(root ->LChild); /* 先序遍历左子树 */
PreOrder(root ->RChild); /* 先序遍历右子树 */
}
}

void InOrder(BiTree root)
/* 先序遍历输出二叉树结点, root为指向二叉树根结点的指针 */
{
if (root!=NULL)
{
/* 输出根结点 */
PreOrder(root ->LChild);
printf(” %c “,root->data); /* 先序遍历左子树 */
PreOrder(root ->RChild); /* 先序遍历右子树 */
}
}
void PostOrder(BiTree root)
/* 先序遍历输出二叉树结点, root为指向二叉树根结点的指针 */
{
if (root!=NULL)
{
/* 输出根结点 */
PreOrder(root ->LChild); /* 先序遍历左子树 */
PreOrder(root ->RChild); /* 先序遍历右子树 */
printf(” %c “,root->data);
}
}

void PreOrders(BiTree root)
/* 先序遍历输出二叉树中的叶子结点 , root为指向二叉树根结点的指针 */
{
if (root!=NULL)
{
if (root ->LChild==NULL && root ->RChild==NULL)
printf(” %c “,root->data); /* 输出叶子结点 */
PreOrder(root ->LChild); /* 先序遍历左子树 */
PreOrder(root ->RChild); /* 先序遍历右子树 */
}
}

int leaf(BiTree root)
{
int LeafCount;
if(root==NULL)
LeafCount =0;
else if((root->LChild==NULL)&&(root->RChild==NULL))
LeafCount =1;
else /* 叶子数为左右子树的叶子数目之和 */
LeafCount =leaf(root->LChild)+leaf(root->RChild);
return LeafCount;
}

int PostTreeDepth(BiTree bt) /* 后序遍历求二叉树bt高度的递归算法 */
{
int hl, hr, max;
if(bt!=NULL)
{
hl=PostTreeDepth(bt->LChild); /* 求左子树的深度 */
hr=PostTreeDepth(bt->RChild); /* 求右子树的深度 */
max=hl>hr?hl:hr; /* 得到左、右子树深度较大者*/
return(max+1); /* 返回树的深度 */
}
else return(0); /* 如果是空树,则返回0 */
}

void PrintTree(BiTree bt ,int nLayer)
{
//树状输出
int i;
if(bt== NULL) return;
PrintTree(bt->RChild,nLayer+1);
for(i; i

原创粉丝点击