数据结构——树
数据结构——树
聂炳玉
不断学习,不断提升
展开
-
105从前序与中序遍历序列构造二叉树
一、前言标签:树_构建二叉树。问题来源LeetCode 105难度:中等。问题链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/二、题目根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,2.原创 2020-07-25 16:32:18 · 198 阅读 · 0 评论 -
124二叉树中的最大路径和
一、前言标签:树。问题来源LeetCode 124 难度:困难。问题链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/二、题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点示例1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输.原创 2020-07-25 14:59:14 · 149 阅读 · 0 评论 -
监控二叉树详细讲解
一、前言问题来源LeetCode 968,难度:困难问题链接:https://leetcode-cn.com/problems/binary-tree-cameras/二、题目给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,n..原创 2020-05-21 00:37:02 · 1947 阅读 · 0 评论 -
红黑树
一、前言《二叉查找树全面详细介绍》介绍了二叉搜索树,它可以基本操作有:搜索(查找)、遍历、插入、删除等,其时间复杂度均为O(h),因此,如果搜索树的高度较低时,这些集合操作会执行得较快。然而,如果树的高度较高时,这些集合操作可能并不比在链表上执行得快。红黑树(red-black tree)是许多“平衡”搜索树中的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(Ign)。《二叉树平衡(有序数组创建)》、《二叉树平衡(DSW算法)》、《二叉树平衡(AVL树)》介绍了怎样构建平衡二叉树。参考:原创 2020-07-05 16:27:25 · 247 阅读 · 0 评论 -
二叉树平衡(AVL树)
一、前言《二叉查找树全面详细介绍》中讲解了二叉树操作:搜索(查找)、遍历、插入、删除。《二叉树遍历详解(递归遍历、非递归栈遍历,Morris遍历)》详细讲解了二叉树遍历的几种方法。《二叉树平衡(有序数组创建)》和《二叉树平衡(DSW算法)》介绍了两种构建平衡二叉树的方法(完全平衡二叉树)。前两篇讨论的算法可以从全局重新平衡树;每个节点都可能参与树的重新平衡:或者从节点中移动数据,或者重新设置指针的值。但是,当插入或删除元素时,将只影响树的一部分,此时树的重新平衡可以只在局部执行。Adel'son-V原创 2020-07-04 15:28:27 · 334 阅读 · 0 评论 -
二叉树平衡(DSW算法)
一、前言《二叉查找树全面详细介绍》中讲解了二叉树操作:搜索(查找)、遍历、插入、删除。《二叉树遍历详解(递归遍历、非递归栈遍历,Morris遍历)》详细讲解了二叉树遍历的几种方法。《二叉树平衡(有序数组创建)》通过了一种构建平衡二叉树的方法《二叉树平衡(有序数组创建)》讨论的算法的效率有点低,因为在创建完全平衡的树之前,需要使用一个额外的有序数组。为了避免排序,这一算法需要破坏树并用中序遍历把元素放在数组中,然后重建该树,这样做效率并不高,除非树很小。然而,存在几乎不需要存储中间变量也不需要排序过程原创 2020-07-02 23:40:51 · 1584 阅读 · 0 评论 -
二叉树平衡(有序数组创建)
一、前言《二叉查找树全面详细介绍》中讲解了二叉树操作:搜索(查找)、遍历、插入、删除。《二叉树遍历详解(递归遍历、非递归栈遍历,Morris遍历)》详细讲解了二叉树遍历的几种方法。本文介绍一种二叉树平衡构建方法。二、思路根据二叉树插入的规则,我们只需要按照正确顺序将元素添加到二叉树中,就可以构建一颗平衡二叉树了。三、总结该方法需要额外空间记录树中所有元素,并对其排序,这个构建过程效率不高,且需要额外空间,当构建好平衡二叉树之后,如果需要添加元素,是无法直接添加,需要删除树,重..原创 2020-07-02 20:26:49 · 871 阅读 · 0 评论 -
二叉树遍历详解(递归遍历、非递归栈遍历,Morris遍历)
一、前言《二叉查找树全面详细介绍》中讲解了二叉树操作:搜索(查找)、遍历、插入、删除。其中遍历深度优先遍历(DFS)按照实现方法可以分为:递归遍历实现、非递归遍历实现、Morris遍历实现,文中只给了代码,没有对实现过程进行讲解,本文将对递归遍历实现、非递归遍历栈实现、Morris遍历实现这三类实现方法进行讲解。二、三类实现方法特点递归实现编码简单,易于理解; 隐式使用栈存储当前没有处理完的节点信息; 若树深度大,递归深度大可能会超过堆栈保留大小;时间复杂度:O(n),空间复杂度.原创 2020-07-01 23:08:57 · 3737 阅读 · 1 评论 -
二叉查找树全面详细介绍
一、前言重新梳理整理归纳二叉搜索树。主要参考《C++数据结构与算法》。二、定义二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。二叉排序树定义,一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; 左、右子树也分别为二叉排序树; 没有键值相等的结点.原创 2020-06-29 22:52:37 · 1850 阅读 · 0 评论