• 树1-概念


    前言

    树在计算机领域,使用的非常广泛,但是在我们平常开发中,并不会经常自己手写树,因为很多方法都已经被封装实现了,比如map(底层使用的就是树)。但是在一些算法领域(比如acm,算法工程师,大厂及高级职位的面试),树是必须要掌握的一种数据结构。

    参考

    https://zh.wikipedia.org/wiki/%E6%A0%91_(%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84)

    http://data.biancheng.net/tree/

    《算法导论》

    简介

    [自由|无序]树-[自由|无序]树是一个连通的,无环的无向图。

    有根树-有根树是一棵自由树,其顶点中存在一个与其他顶点不同的顶点。我们称该不同的顶点为树的根。如下图,这就是一棵树结构,按照定义,类似于生活中真正的树,倒过来的样子,所以最顶端的A的位置,称为根。

    • 结点-树中所有的元素,都称作为结点,包括特殊的叶子结点和根结点
    • 父结点-一个节点的上一级节点称为父结点
    • 子结点-一个节点的下一级结点称为子结点
    • 根结点-一个结点如果没有父结点,被称为根结点,比如上图的A
    • 叶子结点-一个结点如果没有子结点,被称为叶子结点,比如上图的KJLOP
    • 子树-把一个结点下的每一个子结点作为根,又可以看做一棵树,那么以这个结点的子结点为根的树,就是这个结点的子树。比如以B或C为根的树,就是A的子树
    • 结点的度-一个结点拥有的子树个数,称作为这个结点的度。也可以看做是子结点的个数。所以叶子结点还有另外一个定义,就是度为0的节点,就叫做叶子结点。
    • 树的度-一棵树中最大结点的度也称作树的度。树的度在实际操作中没有特别的作用,有些笔试题中会根据这个出题。
    • 层次-根所在的属于第一层,每经过一个结点层加一。一个结点的层,就是从根开始,到达自己唯一一条路径经过的节点个数。
    • 深度-空树的深度是-1。非空树的根是0,每经过一个结点,深度加一。也就是从根到自己唯一路径的长度。深度这个地方就是按照树的数据结构定义的,虽然数据结构中的树被描述为现实中倒立的树,但是在深度的定义上,还是根属于上面,向下属于变深,并没有按照倒立的树定义,从根到树叶属于变高。
    • 高度-一个结点的高度是从这个结点到叶子结点最长路径的长度。叶子结点的高度是0。
    • 树的高度/深度-树的高度和深度是一样的,就是从根结点到叶子结点最长路径的长度。
    • 路径长度-路径长度是两个结点之间边的个数,也就是两个结点之间(算上自己)唯一路径上所有结点数减一
    • 兄弟结点-相同父结点的结点,相互称作兄弟结点。
    • 堂兄弟结点-父结点在同一层的子结点,相互称作兄弟结点
    • 结点的祖先-从根结点到到该结点路径上的所有结点称作该结点的祖先
    • 子孙-以该结点为根的子树下的所有结点都是该结点的子孙
    • 森林-m棵互不相交的树组成的集合称作森林

    有序树-有序树是一棵有根树,其中每个孩子的结点是有顺序关系的。

    二叉树-每个结点最多含有两个子树

    满二叉树-每个结点度为0或2,也就是不存在度为1的结点。每个结点要么是有两个子结点,要么是没有子结点(叶子结点)。如图

    完全二叉树-所有叶子结点的深度相同,并且内部结点都是度为2的二叉树。也就是是一棵满二叉树,并且叶子结点处在同一层。如图

    对于满二叉树和完全二叉树,还有不同的解释,上面是《算法导论》中的定义。

  • 相关阅读:
    k8s学习
    k8s学习
    k8s学习
    Linux 常用命令(持续补充)
    通过一个小故事,理解 HTTPS 工作原理
    Spring Cloud 微服务架构全链路实践
    Spring Cloud Eureka 使用 IP 地址进行服务注册
    RabbitMQ 消息顺序、消息幂等、消息重复、消息事务、集群
    Spring Boot 实现 RabbitMQ 延迟消费和延迟重试队列
    RabbitMQ 集群原理和完善
  • 原文地址:https://www.cnblogs.com/studywithallofyou/p/12742538.html
Copyright © 2020-2023  润新知