数据结构--树详解(1)

本文详细介绍了树的概念,包括树的存储结构:双亲表示法、孩子表示法和孩子兄弟表示法,以及二叉树的特点、特殊类型和遍历方法。在树的存储结构中,探讨了各种方法的优缺点,例如查找双亲和孩子节点的效率。
摘要由CSDN通过智能技术生成

1.树(tree)的概念

注释在线结构:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

:是n个节点的有限集合。当n=0时,称为空树。在任意一个非空树中,有且仅有一个特定的称为根(root)的节点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集合 T1,T2 ,Tm,其中每一个集合又是一棵树,并且称为根的子树。

节点的度:节点拥有的子树个数称为节点的度。如下图B节点的度为2,J节点的度为1,度为0的节点称为叶子节点或终端节点(拥有一个节点的树),如 A,C,E,K

树的度:节点的度中最大值,为数的度,如下图树度为2

树的深度或高度:节点的层次从根开始定义起,根为第一层,根的孩子为第二层
如下如:
在这里插入图片描述

线性结构:

  • 第一个数据元素:无前驱。
  • 最后一个元素:无后继。
  • 中间元素:一个前驱一个后继。

树结构:

  • 根节点:无双亲,唯一。
  • 叶子节点:无孩子,可以多个。
  • 中间节点:一个双亲多个孩子。

2.树的存储结构

2.1 双亲表示法

结构代码定义:

@Data
public class TreeParentDemo {
   

    //根节点
    private  Node  root;

    public TreeDemo(String data) {
   
        this.root = new Node(data,null);
    }

    @Data
    class Node{
   

        public Node(String data, Node parent) {
   
            this.data = data;
            this.parent = parent;
        }

        /**
         * 数据域  存储A,B,C等
         */
       private String  data;

        /**
         * 指向父亲节点的地址
         */
        private Node parent;
    }

}

注释:根节点的父级地址设置为null,每个节点存储数据域和父级节点地址。

如下图:
在这里插入图片描述

数据库存储:

id data parentId
0 A -1
1 B 0
2 C 0
3 D 1
4 E 2
5 F 2
6 G 3
7 H 3
8 I 3
9 J 4

优点:1.查找已知节点的父节点很容易,直接通过父级节点地址找到它的双亲。所用时间复杂度为O[1]。
例如:已知F(5)节点 ,查找其父节点,可直接通过F节点中父级地址(id:2),直接查找。
缺点:1.查找已知节点的孩子节点,需要遍历整个数据结构才行.
例如:已知F(5)节点 ,查找其孩子节点,需要遍历正个数据结构,对比查找。如数据库执行 select * from 表 where parentId = 5 需要扫描整个数据行一一对比(该表parentId未加索引的情况下).

2.2 孩子表示发

结构代码定义:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值