515. 在每个树行中找最大值
题目点击前往
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。
示例 1:
12输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]
示例 2:
12输入: root = [1,2,3]输出: [1,3]
解题思路
利用层序遍历查找最大值。
注意用于记录最大值的变量的初始化赋值。
1234567891011121314151617181920212223242526272829/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** * @param {TreeNode} ...
429. N 叉树的层序遍历
题目点击前往
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 1:
12输入:root = [1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]
解题思路
这里解题思路与二叉树的层序遍历一样,我们只需要注意N叉树的存储结构就可以很轻松的完成遍历。
针对示例中的N叉树存储结构如下:
所以我们每次只需要访问其children,如果不为null,则将它们拼接起来,然后返回。
123456789101112131415161718192021222324252627282930/** * // Definition for a Node. * function Node(val,children) { * this.val = val; * this.children = children; * }; *//** * @param {Node|null} root * @return ...
637. 二叉树的层平均值
题目点击前往
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。
示例 1:
1234输入:root = [3,9,20,null,null,15,7]输出:[3.00000,14.50000,11.00000]解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。因此返回 [3, 14.5, 11] 。
解题思路1234567891011121314151617181920212223242526272829/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : rig ...
199. 二叉树的右视图
二叉树的层平均值
算法学习笔记(六)二叉树的层序遍历(理论)
理论基础
层序遍历一个二叉树就是:从左到右一层一层的去遍历二叉树。
需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。
题目汇总102. 二叉树的层序遍历
107. 二叉树的层序遍历 II
Undefined、Null、Boolean
107. 二叉树的层序遍历 II
题目一点击前往
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
示例 1:
12输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]
示例 2:
12输入:root = [1]输出:[[1]]
示例 3:
12输入:root = []输出:[]
解题思路
与lc-102思路一样。
102. 二叉树的层序遍历
1234567891011121314151617181920212223242526272829/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ...
102. 二叉树的层序遍历
题目点击前往
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
12输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]
示例 2:
12输入:root = [1]输出:[[1]]
示例 3:
12输入:root = []输出:[]
解题思路123456789101112131415161718192021222324252627282930313233/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** * @par ...
算法学习笔记(五)回溯算法
什么是回溯法
算法学习笔记(四)常见的排序算法
前言算法分类
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
算法复杂度
插入排序
将原序列分为已排序与未排序的两部分。
外层循环遍历整个序列,标记当前待插入元素。
内层循环遍历已排序序列,从有序表的尾部开始与当前值进行比较移动。
1234567891011121314151617/** * @param {number[]} nums * @return {number[]} */var sortArray = function(nums) { let len = nums.length; for(let i = 0;i < len;i++){ for(let j = i;j > 0;j--){ if(nums[j-1] > nums[ ...