二叉树
堆是一种特殊的树形数据结构,其每个节点都有一个值,通常提到的堆都是指一棵完全二叉树,根节点的值小于(或大于)两个子节点的值。同时,根节点的两棵子树也分别是一个堆。 堆排序是一种选择排序,在排序过程中,将 R[1···n] 看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和子节点之间的内在关系来选择最小元素
在说这个题目之前先来说说一个排序算法 “归并算法” 归并算法采取思想是分治思想,分治思想简单说就是分而治之,将一个大问题分解为小问题,将小问题解答后合并为大问题的答案。乍一看跟递归思想很像,确实如此,分治思想一般就是使用递归来实现的。 但是需要注意的是:递归是代码实现的方式,分治属于理论
二叉树是n(n>=0)个结点的有限集合: 或者为空二叉树,即n=0。 或者由一个根结点和两个互不相交的被称为跟的左子树和右子树组成。左子树和右子树又分别是一棵二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 如上图所示,因为按层打印的顺序决定应该先打印根结点,所以我们从树的根结点开始分析。为了接下来能够打印值为8的结点的两个子结点,我们应该在遍历该结点时把值为6和10的两个结点保存到一个容器里,现在容器内就有两个结点了
对于二叉树的遍历分为三种:前序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)。假设一个树高为h的二叉树,三种遍历算法的时间复杂度都是O(n),空间复杂度为O(h) 因为遍历二叉树的每一个节点,最好的情况就是每一个节点被访问一次,所以时间复杂度无法再优化,但是空间复杂度仍然可以优化。 二叉树的遍历算法可以使用递归和非递归来实现,递归会有隐式的调用堆栈,非递归使用额外的数据结构来支持
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征
迭代器是一种能够遍历某个序列或容器的所有元素的对象,所有容器都有各自的迭代器,当开发人员使用某种容器的迭代器时,不需要包含特别的头文件,但是如果要使用逆向迭代器、插入型迭代器、流迭代器,则需要包含< iterator>头文件。迭代器共分为五种,分别为: Input iterator(输入型迭代器)、Output iterato 关联式容器其实就是关联数组概念的推广,依据选定的排序准则,自动为其元素排序。通常关联式容器是由二叉树做出来的,每个元素都有一个父节点和两个子节点,左子树的所有元素都比自己小,右子树的所有元素都比自己大
描述:二 分查找针对有序的数据集合,每次与区间中间元素对比,将待查找区间缩为一半,直到找到或区间被缩小为 0。 依赖顺序表结构,因为需要下标随机访问。 需要有序数据
给定一棵所有节点都为非负值的二叉搜索树,计算树中任意两节点的差的绝对值的最小值。 先来看二叉搜索树的定义: 若左子树不为空,则左子树上所有节点值均小于它的根节点值; 若右子树不为空,则右子树上所有节点值均大于它的根节点值; 任意节点的左、右子树也分别为二叉搜索树。 题目要求二叉搜索树上任意两节点的差的绝对值的最小值
二叉树的问题用分治的思想来做都比较简单,这道题首先想到的就是递归。 我们要求21的坡度,其实就是求21的左子树上的结点之和以及右子树上的结点之和的差值。21的左子树上的结点之和 = 7 + 7的左子树之和 + 7的右子树之和,并且在求和的同时我们可以把坡度算出来