您的位置:首页 > 其它

文章标题

2017-11-26 16:38 190 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: