一、前言 二叉堆是一个特殊的堆,其本质是一棵完全二叉树,可用数组来存储数据,如果根节点在数组的下标位置为1,那么当前节点n的左子节点为2n,有子节点在数组中的下标位置为2n+1。二叉堆类型分为最大堆(大顶堆)和最小堆(小顶堆),其分类是根据父节点和子节点的大小来决定的,在二叉堆中父节点总是大于或等于 ...
分类:
编程语言 时间:
2020-09-16 12:12:33
阅读次数:
31
//前序遍历 /** * 根-左-右,所以入栈的时候要相反,有右节点则加入右节点,有左节点则加入左节点,每车循环的时候,弹一个 */ public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> lis ...
分类:
编程语言 时间:
2020-09-11 14:23:16
阅读次数:
41
class Solution(object): # 递归思路: # (1)如果二叉树为空,节点个数为0 # (2)如果二叉树不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1 def countNodes(self, root): """ :type root: TreeNode ...
分类:
其他好文 时间:
2020-09-11 14:10:52
阅读次数:
39
二叉树的遍历 树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实 ...
分类:
其他好文 时间:
2020-09-09 19:03:13
阅读次数:
33
首先,我们上一篇说到了递归的二叉树套路,但是递归还有一种更常见的类型,就是题目我们要找到所有有可能的集合,这种类型我称之为"数组添加"。当然我现在这么说,可能你们看得也很懵,但是我举几个例子你们就懂了。我从leetcode里面找来了几道题目: ①给定一个数组 candidates 和一个目标数 ta ...
分类:
编程语言 时间:
2020-09-09 18:50:07
阅读次数:
38
题目: 题目解析: 这个题目和之前我们做的稍微有一点不一样,需要我们在函数里面再写一个函数才能够进行递归,还有一种则是广度优先搜索的方法来求解这道题,这两种方法都需要掌握。这里先给出递归解法,迭代的方法稍后在补充。递归的方法你看看代码自然就懂了: # Definition for a binary ...
分类:
编程语言 时间:
2020-09-09 18:44:42
阅读次数:
24
题目: 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 题目解析: 方法一: 这个题目很明显就可以用递归来做,有关树的题目用递归来做基本上是我们需要想到的首选!如果两个树是相同的,我们只需要比较其树根是相同的,同时递归调用比较树根 ...
分类:
编程语言 时间:
2020-09-09 18:40:26
阅读次数:
32
树回归 当回归的数据呈现非线性时,就需要使用树回归。 树回归的基本逻辑 遍历所有特征 针对某一特征,遍历该特征的所有值 针对某一特征值,进行划分数据,计算出划分数据之后的总方差, 若总方差最小,记下特征和特征值 当遍历完所有特征后,就能够获得最小方差的特征和特征值,并以此作为树的结点,划分左右子树, ...
分类:
其他好文 时间:
2020-09-07 19:22:59
阅读次数:
74
一、实现思想 平衡二叉树比二叉查找树升级在哪里? 平衡二叉树是在二叉查找树的属性『左小右大』的基础上做一个调整,确保每一个节点的左右子树高度差不大于1,这样在运用『左小右大』进行查找时,就可以一下子排除许多数。最直观的,平衡二叉树就不会有像二叉查找树那样一边倒的例子。 如何确保每个节点的左右子树高度 ...
分类:
其他好文 时间:
2020-09-07 19:09:38
阅读次数:
57
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路: 这个题目其实非常基础了,也就是直接使用BFS广度优先搜索算法对整棵二叉树进行遍历即可,我们最后返回的是一个数组 "[]",把遍历之后的元素放到这个数组当中即可。为了进行BFS,我们首先新建一个队列,将树根部的节点放到队列里 ...
分类:
编程语言 时间:
2020-09-04 17:24:39
阅读次数:
59