数据结构:【二叉树】 先序,中序,后序,层序,递归实现!

* 二叉树的基本操作*

递归实现先序 中序  后序  层序遍历    

二叉树特点 :

             每个节点最多有两个子树,二叉树不存在度大于2的节点
             二叉树的子树有左右之分,其子树的次序不能颠倒

二叉树的存储

   A 顺式存储
优点: 存储完全二叉树,简单省空间。
缺点: 存储一般二叉树尤其单支树,存储空间利用不高。

   B 链式存储
优点:链式存储相对二叉树比较大的时候浪费空间较少。
缺点:但是读取某个指定节点的时候效率偏低O(nlogn) 。
//定义树的节点
typedef char Datatype;
typedef struct Bitnode
{   
    Datatype data; //数据域
    struct Bitnode *lchild;
    struct Bitnode *rchild;
}Bitnode, Bitree;

先序遍历(递归) :V L R

void priorTraverse(Bitree* tree)
{
    if (tree == NULL)
    {
        return;
    }
    printf("%c", tree->data);   //访问跟节点
    priorTraverse(tree->lchild);  //访问左子树
    priorTraverse(tree->rchild);   //访问右子树
}

中序遍历 (递归) :L V R


void inTraverse(Bitree *tree)
{
    if (tree == NULL)
    {
        return;
    }
    priorTraverse(tree->lchild);
    printf("%c", tree->data);
    priorTraverse(tree->rchild);
}

后续遍历 (递归) :L R V

void laterTraverse(Bitree *tree)
{
    if (tree == NULL)
    {
        return;
    }
    priorTraverse(tree->lchild);
    priorTraverse(tree->rchild);
    printf("%c", tree->data);
}

层序遍历(递归版)

int levelprint(Bitree *tree , int level)
{    
    if (tree = NULL || level < 0)   
    {   //非法输入
        return 0;
    }
    if (level == 0)   //我们把根节点当做第0层,之后层次依次增加,
    {
        printf(" %c ", tree->data);
        return 1;
    }
    return levelprint(tree->lchild, level - 1) + levelprint(tree->rchild, level - 1);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值