【数据结构】【仅代码】二叉树

简介: 【数据结构】【仅代码】二叉树

代码内容包括:二叉树的遍历(先序、中序、后序) 二叉树的创建(先序) 以及二叉树深度和叶子数目的求法


</details>
#include <stdio.h>
#include <stdlib.h>
typedef char dataType;
typedef struct node{
    dataType data;
    struct node *lchild,*rchild;
}BinTree;
/*---创建二叉树---*/
BinTree *CreateBinTree()
{/*先序建立一个二叉树链表*/
    BinTree *bt = NULL;
    char ch;
    ch = getchar();
    if(ch!='#')
    {
        bt = (BinTree *)malloc(sizeof(BinTree));
        bt->data = ch;
        bt->lchild = CreateBinTree();
        bt->rchild = CreateBinTree();
    }
    return bt;
}
void  endprintfBinTree(BinTree *bt)
{
    if(bt != NULL)
    {/*---后序二叉树遍历---*/
        endprintfBinTree(bt->lchild);
        endprintfBinTree(bt->rchild);
        printf("%c",bt->data);
    }
}
void  firstprintfBinTree(BinTree *bt)
{
    if(bt != NULL)
    {/*---先序二叉树遍历---*/
        printf("%c",bt->data);
        firstprintfBinTree(bt->lchild);
        firstprintfBinTree(bt->rchild);
    }
}
void  middelprintfBinTree(BinTree *bt)
{
    if(bt != NULL)
    {/*---中序二叉树遍历---*/
        middelprintfBinTree(bt->lchild);
        printf("%c",bt->data);
        middelprintfBinTree(bt->rchild);
    }
}
/*---按中序遍历的方法求叶子节点的总数---*/
void CountLeaf(BinTree *t,int* count)
{
    if(t)
    {
        if(!(t->lchild)&&!(t->rchild))
        {
            (*count)++;
        }
         CountLeaf(t->lchild,count);
         CountLeaf(t->rchild,count);
    }
}
/*---求二叉树深度---*/
int  Depth(BinTree *t)
{
    int h1,hr;
    if(!t) return 0;
    else
    {
        h1 = Depth(t->lchild);
        hr = Depth(t->rchild);
        if(h1>=hr) return h1+1;
        else       return hr+1;
    }
}
int main()
{
    BinTree *bt;
    int a = 0;
   bt =  CreateBinTree();
    firstprintfBinTree(bt);
    middelprintfBinTree(bt);
    endprintfBinTree(bt);
    CountLeaf(bt,&a);
    printf("%d",a);
    printf("\n%d",Depth(bt));
}

相关文章
|
1月前
|
算法 开发者 计算机视觉
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
38 0
|
21天前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
76 8
|
1月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
29 1
|
1月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
24 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
1月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
26 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
1月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
28 1
|
1月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
25 1
|
1月前
|
存储
【数据结构】二叉树链式结构——感受递归的暴力美学
【数据结构】二叉树链式结构——感受递归的暴力美学
|
1月前
|
存储 算法 调度
数据结构--二叉树的顺序实现(堆实现)
数据结构--二叉树的顺序实现(堆实现)
|
1月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
29 0