【数据结构初学笔记09】第三章二叉树遍历的实现2

01二叉树遍历

包含了队列实现二叉树层序遍历,按照先序遍历的顺序输出二叉树的叶子结点,求二叉树的高度等方法。利用一个中序遍历序列和一个前序或后序遍历序列,可以唯一确定一个二叉树。(文中使用到了伪代码,编译调试需进行修改)

//层序遍历:遍历从根节点开始,首先将根节点入队,然后执行循环:结点出队、访问该结点、其左右儿子入队
#include <stdio.h>
#include <stdlib.h>
#define ElementType BinTree
#define ERROR 0
typedef struct TreeNode *BinTree;
struct TreeNode
{
    int Data;
    BinTree Left;
    BinTree Right;
};

void LevelOrderTraversal(BinTree BT); //二叉树层序遍历的实现
// 01层序遍历:根结点入队;
//从队列中取出一个元素;访问该元素所指向的结点;
//若该元素所指结点的左右孩子结点非空,将其左右孩子结点的指针顺序入队。
void LevelOrderTraversal(BinTree BT)
{
    Queue Q;
    BinTree T;
    if (!BT) //若是空树,直接返回
        return;
    Q = CreatQueue(MaxSize); //创建并初始化队列Q
    AddQ(Q, BT);
    while (!IsEmptyQ(Q))
    {
        T = DeleteQ(Q);
        printf("%d\n", T->Data);
        if (T->Left)
            AddQ(Q, T->Left);
        if (T->Right)
            AddQ(Q, T->Right);
    }
}
// 02.输出二叉树中的叶子节点:在遍历算法中,增加检测结点的左右子树是否为空,若空,打印该结点。
void PreOrderPrintLeaves(BinTree BT)
{
    if (BT)
    {
        if (!BT - Left && !BT->Right)
            printf(“% d”, BT->Data);
        PreOrderPrintLeaves(BT->Left);
        PreOrderPrintLeaves(BT->Right);
    }
}
// 03.求二叉树的高度。
int PostOrderGetHeight(BinTree BT)
{
    int HL, HR, MaxH;
    if (BT)
    {
        HL = PostOrderGetHeight(BT->Left);  /*求左子树的深度*/
        HR = PostOrderGetHeight(BT->Right); /*求右子树的深度*/
        MaxH = (HL > HR) ? HL : HR;         /*取左右子树较大的深度*/
        return (MaxH + 1);                  /*返回树的深度*/
    }
    else
        return 0; /* 空树深度为0 */
}
//03.由两种遍历序列唯一确定一颗二叉树:必须要有中序遍历

结束

课程来源:浙江大学数据结构慕课MOOC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值