参考:https://mp.weixin.qq.com/s/5HNohRY3sO5Yzr3JJvNnlA

文章目录

  • 简述
  • 树的基本概念的组成
    • 树的基本概念
      • (1)节点
      • (2)根节点
      • (3)子树
      • (4)节点的度
      • (5)叶子节点(也称叶节点、终端节点)
      • (6)父节点(双亲节点)
      • (7)兄弟节点
      • (8)树的度
      • (9)节点的层次
      • (10)树的高度、深度
      • (11)有序树和无序树
    • 树的种类
      • (1)二叉树
      • (2)满二叉树
      • (3)完全二叉树
      • (4)平衡二叉树
      • (5)二叉查找树
      • (6)B树
      • (7)B-树
      • (8)B+树
      • (9)B*树
      • (10)红黑树(Red-Black Tree)
      • (11)哈夫曼树
      • (12)字典树(trie树)
  • 实例解析
    • 题目1:不同的二叉搜索树
    • 题目2:验证二叉搜索树

简述

树是一种抽象数据类型,用来模拟具有树状结构性质的数据集合。树与线性表、栈、队列等线性结构不同,树是一种非线性结构。一棵树只有一个根结点,树(tree)是被称为结点(node)的实体的集合,是由n(n>=1)个有限节点组成的一种具有层次关系的集合。下面一起来看看吧:

树的基本概念的组成

树的基本概念

(1)节点

树中每个元素都叫节点

(2)根节点

树顶端的节点称之为根节点

(3)子树

除根节点之外,其他节点可以分为多个树的集合叫做子树

(4)节点的度

一个节点直接含有的子树的个数,称之为节点的度

(5)叶子节点(也称叶节点、终端节点)

度为0的节点叫做叶子节点

(6)父节点(双亲节点)

父节点就是一个节点上头的那个节点,如果一个节点包含若干子节点,那么这个节点就是这些子节点的父节点,也叫双亲节点

(7)兄弟节点

拥有相同父节点的节点互称为兄弟节点

(8)树的度

一棵树中最大节点的度称之为树的度,即树中哪个节点的子节点最多,那么这个节点的度也就是树的度

(9)节点的层次

从根这一层开始,根算1层,根的子节点算2层,一直到最下面一层

(10)树的高度、深度

树的深度是从根节点开始、自顶向下逐层累加(根节点的高度是1)
树的高度是从叶节点开始、自底向上逐层累加(叶节点的高度是1)
虽然树的高度和深度一样,但是具体到某个节点上,其高度和深度通常不一样

(11)有序树和无序树

树中任意一个结点的各子树按从左到右是有序的,称为有序树,否则称为无序树

树的种类

树的种类较多,较为常见的树有:二叉树、满二叉树、完全二叉树、平衡二叉树、二叉查找树、B树、B-树、B+树、B*树、红黑树、哈夫曼树和trie树等

(1)二叉树

每个节点最多有两个子节点的树

(2)满二叉树

一个二叉树所有的分支节点都存在左子树与右子树,而且所有的叶子节点都在同一层上(一棵深度为k,且有2^k-1个节点的二叉树),称为满二叉树

(3)完全二叉树

只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树,满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树

(4)平衡二叉树

AVL树全称G.M. Adelson-Velsky和E.M. Landis,是由两个人的人名组成,AVL树是所有节点的左右子树的高度差小于1的二叉树,空树也是平衡二叉树的一种

(5)二叉查找树

又叫二叉排序树(Binary Sort Tree)、二叉搜索树,具有下列基本性质:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
它的左、右子树也分别为二叉搜索树
空树也是二叉查找树

(6)B树

即二叉搜索树,所有非叶子结点至多拥有两个儿子,所有结点存储一个关键字,非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树

(7)B-树

是一种多路搜索树(并不是二叉的),关键字集合分布在整颗树中,任何一个关键字出现且只出现在一个结点中,搜索有可能在非叶子结点结束,除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少利用率,其搜索性能等价于在关键字全集内做一次二分查找

(8)B+树

B+树是B-树的变体,也是一种多路搜索树,其定义基本与B-树同,但所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的,B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找,更适合文件索引系统

(9)B*树

是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针,B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3(代替B+树的1/2)

(10)红黑树(Red-Black Tree)

是二叉搜索树(Binary Search Tree)的一种改进,红黑树的每个节点上的属性除了有一个key、3个指针:parent、lchild、rchild以外,还多了一个属性:color。它只能是两种颜色:红或黑。而红黑树除了具有二叉搜索树的所有性质之外,还具有以下基本性质:
根节点是黑色的
空节点是黑色的(红黑树中,根节点的parent以及所有叶节点lchild、rchild都不指向NULL,而是指向一个定义好的空节点)
红色节点的父、左子、右子节点都是黑色
在任何一棵子树中,每一条从根节点向下走到空节点的路径上包含的黑色节点数量都相同

(11)哈夫曼树

带权路径长度达到最小的二叉树,也叫做最优二叉树,不关心树的结构,只要求带权值的路径达到最小值,哈夫曼树可能是完全二叉树也可能是满二叉树

(12)字典树(trie树)

又称为单词查找树,是一种哈希树的变种,利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较,典型应用是用于统计,排序和保存大量的字符串(不仅限于字符串),经常被搜索引擎系统用于文本词频统计。trie树具有以下基本性质:
根节点不包含字符,除根节点外的每一个子节点都包含一个字符
从根节点到某一节点。路径上经过的字符连接起来,就是该节点对应的字符串
每个节点的所有子节点包含的字符都不相同

实例解析

题目1:不同的二叉搜索树

题目描述:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
给出 n = 3,则有 5 种不同形态的二叉查找树:

   1         3     3      2     1\       /     /      / \      \3     2     1      1    3      2/     /       \                   \2     1         2                   3

解题思路:如果只有1个节点,很容易得到只有1种情况(f(1)=1),2个节点,也很容易得到两只有2种情况(f(2)=2),要是有3个,f(3) = f(2)f(0)+f(1)f(1)+f(0)(2),归纳可以得到如下关系( f(0)=1 ):f(n) = f(n-1)f(0) + f(n-2)f(1) + f(n-3)f(2) + … + f(1)f(n-2) + f(n-1)f(0)
注:下面代码可左右滑动查看

class Solution {public int numTrees(int n) {if(n == 0){return 0;}int[] nums = new int[n+1];nums[0] = 1; nums[1] = 1;if(n > 1){for (int i = 2; i <= n; i++) {for (int j = 0; j < i; j++) {nums[i] += nums[j] * nums[i-1-j];}}}return nums[n];}
}

题目2:验证二叉搜索树

题目描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例1:
输入:

    2/ \1   3

输出: true
示例 2:
输入:

    5/ \1   4/ \3   6

输出: false
解释: 输入为: [5, 1, 4, null, null, 3, 6]。
根节点的值为 5 ,但是其右子节点值为 4 。
解题思路:通过中序遍历判断所有的节点值是否为升序
注:下面代码可左右滑动查看

class Solution {double last = -Double.MAX_VALUE;public boolean isValidBST(TreeNode root) {if (root == null) {return true;}if (isValidBST(root.left)) {if (last < root.val) {last = root.val;return isValidBST(root.right);}}return false;}
}

算法总结-树(正在更新)相关推荐

  1. 有关树的常见算法汇总【持续更新中】

    关于数据结构中--树的算法汇总[持续更新中] 0.树的顺序和链式存储结构 [完成] 1.树的前序遍历(递归和非递归java实现) [完成] 2.树的中序遍历(递归和非递归java实现) [完成] 3. ...

  2. 数据结构与算法——AVL树类的C++实现

    关于AVL树的简单介绍能够參考: 数据结构与算法--AVL树简单介绍 关于二叉搜索树(也称为二叉查找树)能够參考:数据结构与算法--二叉查找树类的C++实现 AVL-tree是一个"加上了额 ...

  3. 数据结构与算法--B树原理及实现

    B树 前几篇文中讨论的数据结构我们都是假设所有的数据都存储在计算机的主存中.可说总要那么海量的数据需要通过个中数据结构去存储,我们不可能有这么多内存区存放这些数据.那么意味着我们需要将他们放磁盘.所以 ...

  4. 数据结构与算法-java笔记一 更新中

    数据结构与算法-java笔记一 更新中 数据结构与算法 什么是数据结构.算法 数据结构学了有什么用: 线性结构 数组 特点 应用 链表 存储结构 链表类型 单链表 双向链表 双向循环链表 链表与数组的 ...

  5. 【树模型与集成学习】(task2)代码实现CART树(更新ing)

    学习心得 task2学习GYH大佬的回归CART树,并在此基础上改为分类CART树. 更新ing.. 这里做一些对决策树分裂依据更深入的思考引导:我们在task1证明离散变量信息增益非负时曾提到,信息 ...

  6. HDU 1166 敌兵布阵(线段树:点更新,区间求和)

    HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...

  7. HDUOJ----1166敌兵布阵(线段树单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. UVA11992不错的线段树段更新

    题意:       给你一个矩阵,最大20*50000的,然后有三个操作 1 x1 y1 x2 y2 v  把子矩阵的值全部都加上v 2 x1 y1 x2 y2 v  把子矩阵的值全部都变成v 2 x ...

  9. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  10. AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)

    AI:人工智能实践六大场景(金融信用违约.反欺诈模型.客户偏好洞察.智能推荐.精准营销.客户流失管理)及其对应常用机器学习算法经验总结(不断更新) 目录

最新文章

  1. 在浏览器输入URL回车之后发生了什么
  2. DIV周边添加投影及背景固定
  3. jupyter notebook 报错:TypeError: __init__() got an unexpected keyword argument ‘categorical_features‘
  4. c++类指针赋值表达式必须是可修改的左值_C++学习刷题8--复制构造函数和赋值运算符重载函数...
  5. Azure Arc:微软是怎么玩多云游戏的?
  6. css用一张大图片来设置背景的技术真相
  7. Spring Boot 2.3.3 正式发布!
  8. 洛谷——(100分)P1590 失踪的7
  9. Python中各种括号的区别、用途及使用方法
  10. readelf 和 objdump 例子详解及区别 (ELF文件说明)
  11. 广东南方地形地籍成图软件CASS10.1十大新亮点(资源下载在文尾)
  12. 周立功上位机获取CAN通讯数据解析 V2.0
  13. 如何显示 word 左侧目录大纲
  14. 笔记本电脑外接显示器 卡_如何向Mac笔记本电脑添加和配置外接显示器
  15. RestTemplate技术预研——OkHttp
  16. 华中科技大学计算机学院培养计划,华中科技大学计算机专业培养计划
  17. 诚之和:绿茶等茶凉上市? 单店日均销售额降盈利指标不敌同行
  18. 阿龙的学习笔记---《程序员自我修养-链接、装载与库》读书笔记(一)
  19. 在vue添加lottie动画
  20. verilog时钟使能

热门文章

  1. 非机动车检测数据集(用于训练目标跟踪)
  2. 智慧交管大屏可视化决策系统
  3. SONiC-P4实验搭建及研究SONiC管理的交换机
  4. SQLSever 2000 安装环境
  5. SQL查询无限层级结构的所有下级,所有上级(即所有的子孙曾孙等等)
  6. iPhone的全新创意 变身成收音机
  7. 2021-05-31 elem笔记
  8. Docker入门详细教程,全网最全!
  9. 函数式编程如何破坏了我
  10. Unity中利用NOPI读取Excel