• 树和二叉树的概念与使用(Tree&Binary Tree)


            树是一种非线性的数据结构,它在表示机构的组织关系图等方面非常好用,树的示意图如图1所示。

     图1 - 树的示意图

    一、表达方式 

            树主要由自身的数据域和其父节点构成,所以表示方法可以利用一个结构体数据表示,其方法如下。

    1. const int maxn=10;//10个节点
    2. struct node{
    3. int date,prarent;//分别是数据域和父节点
    4. }tree[maxn];//10个节点的数组存储

             树的存储形式如下表所示

    data12345678910
    parent-1111222334

    二、树转化成二叉树  

            因为数的分枝不确定,所以很多情况下其操作起来很不方便,而二叉树最多只有两个节点,即一个左子树和一个右子树,操作和表示起来都会简单很多。通常情况下,对树的处理都是先将其转化成二叉树。

            树转化成二叉树的方法:将一棵树的孩子节点放在二叉树的坐子树,将一棵树的兄弟节点放在右子树即可。

     图2 - 二叉树示意图

    三、二叉树的表示

            由于二叉树最多只有左子树和右子树,所以存储时利用数组存储其左子树和右子树即可。

    1. const int maxn=10;//10个节点
    2. char data[maxn];
    3. char lchild[maxn];//10个节点的左子树信息
    4. char rchild[m];//10个节点的右子树信息
    5. int btree;//根节点

             存储示例如下:

    data12345678910
    Lchild25810-1-1-1-1-1-1
    Rchild-134-167-19-1-1

    四、二叉树的访问

            利用递归程序对二叉树进行访问非常简单,根据访问顺序可分为:先序遍历、中序遍历和后序遍历。先序遍历访问顺序是根左右,中序遍历访问顺序是左根右,后序遍历顺序是左右根。

    代码实现

    先序遍历

    1. void predorder(int root)
    2. {
    3. if(root!=-1)
    4. {
    5. cout<" ";
    6. predorder(lchild[root]);
    7. predorder(rchild[root]);
    8. }
    9. }

    中序遍历

    1. void midorder(int root)
    2. {
    3. if(root!=-1)
    4. {
    5. midorder(lchild[root]);
    6. cout<" ";
    7. midorder(rchild[root]);
    8. }
    9. }

    后序遍历

    1. void postorder(int root)
    2. {
    3. if(root!=-1)
    4. {
    5. postorder(lchild[root]);
    6. postorder(rchild[root]);
    7. cout<" ";
    8. }
    9. }

    好啦,以上就是本章的内容啦,感谢阅读!

  • 相关阅读:
    MATLAB中readtimetable函数用法
    Sklearn 聚类算法的性能评估
    [云原生] 二进制k8s集群(下)部署高可用master节点
    瑞云介绍使用ZBrush和Marmoset工具包制作的风格化巨怪战斗机
    在 React项目中应用TypeScript
    Vue ref属性
    kafka rabbitmq 详细对比
    Qt 综合练习小项目--反金币(1/2)
    秋招面经第五弹:一家上市小公司二面-大数据开发工程师
    数据库三范式
  • 原文地址:https://blog.csdn.net/weixin_46522531/article/details/126488770