二叉树的各类操作

#include <stdio.h>
#include <stdlib.h>






//定义结构
typedef struct Node
{
    char data;
    struct Node*LChild;
    struct Node*RChild;
}BiTNode,*BiTree;






/*创建二叉树*/
void CreateBiTree(BiTree *bt)
{
    char 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)
{
    if(root != NULL)
    {
        printf("%c ",root -> data);/*访问根结点*/
        PreOrder(root -> LChild);/*遍历左子树*/
        PreOrder(root -> RChild);/*遍历右子树*/
    }
}


/*中序遍历二叉树*/
void InOrder(BiTree root)
{
    if(root != NULL)
    {
        InOrder(root -> LChild);/*遍历左子树*/
        printf("%c ",root -> data);/*访问根结点*/
        InOrder(root -> RChild);/*遍历右子树*/
    }
}


/*后序遍历二叉树*/
void PostOrder(BiTree root)
{
    if(root != NULL)
    {
        PostOrder(root -> LChild);/*遍历左子树*/
        PostOrder(root -> RChild);/*遍历右子树*/
        printf("%c ",root -> data);/*访问根结点*/
    }
}


/*二叉树的高度*/
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 */
   }


/*打印二叉树*/
int main(){
    printf("输入:");
    BiTree tree;
    CreateBiTree(&tree);
    printf("\n先序:");
    PreOrder(tree);
    printf("\n中序:");
    InOrder(tree);
    printf("\n后序:");
    PostOrder(tree);
    printf("\n二叉树的深度:%d\n",PostTreeDepth(tree));
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值