数据结构(五)——二叉树(C语言实现)

这篇博客介绍了二叉树的定义和C语言实现,包括构造空二叉树、创建二叉树以及各种遍历方式:递归与非递归的先序、中序、后序遍历,还有层次遍历。文章详细讲解了遍历算法的逻辑,并强调了非递归遍历的实现思路。
摘要由CSDN通过智能技术生成

定义

之前四篇博客分别介绍了线性结构中的顺序表链表队列。从难度来讲,顺序表到链表是递增的。从实现来讲,栈和队列基于顺序表和链表(之前栈采用了顺序表的存储结构,队列采用了链表的存储结构)。此次介绍的二叉树虽是非线性结构的树形结构分支,但在其各个结点遍历的实现上,使用到了栈和队列的特性。

二叉树是一种特殊的线性结构,每个结点最多只有两个分支,称左孩子结点和右孩子结点。更多关于二叉树的特性,自行查阅资料。接下来只详细的介绍创建二叉树以及二叉树的遍历。

实现

定义结构

typedef char TreeType;

typedef struct BitNode {
    TreeType key;
    struct BitNode *left;
    struct BitNode *right;
} BitTree;

二叉树的结构和双向链表的结构一致,只是双向链表的两个指针构成线性结构,二叉树的两个指针构成非线性结构。

定义操作

构造空二叉树

/**
 * 构造空二叉树
 */
void initBitTree(BitTree& root) {
    root.left = NULL;
    root.right = NULL;
}

将根结点的左右两个指针置空。

创建二叉树

/**
 * 创建二叉树(按照前序遍历方式构建二叉树)
 */
void createBitTree(BitTree** parent) {
    char key = getchar();
    getchar();
    if (key == '#') { //输入#表示该节点是叶子节点
        *parent = NULL;
        return;
    } else {
        *parent = (BitTree*) malloc(sizeof(BitTree));
        if (*parent == NULL)
            exit(9);
        (*parent)->key = key;
        createBitTree(&((*parent)->left));
        createBitTree(&((*parent)->right));
    }
}

先序遍历的方式构建二叉树,输入#号表示当前结点的左孩子结点或右孩子结点为空。

递归先序遍历

/**
 * 递归先序遍历
 */
void preOrderTraverse(BitTree* parent) {
    if (parent != NULL) {
        visit(*parent);
        preOrderTraverse(parent->left);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值