二叉树的遍历

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得 每个结点被访问且被访问一次
这个计算机她不像我们人一样是长了一双睿智的眼睛,一看这个二叉树的图就知道该怎么简单地遍历完这棵二叉树,但就这么简单的的事搁在计算机眼里就只有无限的循环和判断,因为她比我们理性多了。

1、先(前)序遍历:

若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树

先(前)序遍历

void PreOrder( BTNode * b) {
     if ( b !=NULL) {
         printf("%c",b ->data);      //先访问根结点
         PeOrder (b ->lchild);       //先序遍历左子树
         PreOrder (b ->rchild);      //先序遍历右子树
     }
 }

2、中序遍历(垂线大法)

若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。
中序遍历(垂线大法)

void InOrder (BTNode *b) {
    if (b != NULL) {
        InOrder(b ->lchild);      //中序遍历左子树
        printf("%c",b ->data);    //访问根结点
        InOrder(b ->rchild);      //中序遍历右子树
    }
}

3、后序遍历

若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后是访问根结点。
后序遍历

void PostOrder( BTNode * b) {
     if ( b !=NULL) {
         PeOrder (b ->lchild);       //先序遍历左子树
         PreOrder (b ->rchild);      //先序遍历右子树
         printf("%c",b ->data);      //访问根结点
     }
 }

4、层次遍历(非递归)

若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
层次遍历

typedef struct {
    BTNode *data [MaxSize];        //存放队列元素
    int front ,rear;               //队头和队尾指针
}SqQueue;                          //顺序队类型
void LevelOrder(BTNode *b) {
     BTNode *p;                      
     SqQueue *qu ;                   //定义环形队列
     InitQueue(qu);                  //初始化队列
     enQueue(qu,b);                  //根结点指针进入
     while (!QueueEmpty(qu)) {       //队列不空循环
         deQueue(qu,p);              //出队结点p
         printf("%c", p->data);      //访问节点p
         if (p ->lchild !=NULL)      //有左孩子的将其进队
             enQueue(qu,p ->lchild);
         if (p ->rchild)             //有右孩子的将其进队
             enQueue (qu ,p ->rchild);
        }
 }
             
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值