Yosgi
Yosgi
Avatar
😀
27 results for Binary Tree
  • 第一时间想的是构造二叉树,然后利用每层对称的关系 ,求出父节点 var pathInZigZagTree = function(label) { let stack = [] for(let i = 1 ; i <= label ; i ++) { let level = Math.floor(Math.log(i) / Math.log(2)) if (!stack[level]) { …
    Algorithms Created Thu, 29 Jul 2021 00:00:00 +1200
  • 用时:60min 被题目的深度误导,认为计算深度需要由上至下。实际上可以由下至上。 如果左右子树高度相同,返回节点本身以及深度 如果左子树比较深,说明最小最深在左子树,返回左子树以及自己的深度 如果右子树比较深,说明最小深度在右边,返回右子树以及自身深度 var subtreeWithAllDeepest = function(root) { var dfs = function (root) { …
    Algorithms Created Sun, 21 Mar 2021 00:00:00 +1300
  • 用时 : 10min 利用前序遍历二叉树递增的性质解决 var minDiffInBST = function(root) { var min = Infinity var pre = null var dfs = function (root) { if (!root) return if (root.left) { dfs(root.left) } if (pre == null) { pre …
    Algorithms Created Thu, 18 Mar 2021 00:00:00 +1300
  • 用时:10min 前序从上至下计算,没什么好说的 二进制转10 进制挺费劲的,我直接parseInt(path, 2) var sumRootToLeaf = function(root) { var ans = 0 var dfs = function (root,path) { if (!root) return path += root.val if (!root.left && …
    Algorithms Created Wed, 17 Mar 2021 00:00:00 +1300
  • 用时:5min 虚拟节点 + 后序遍历 就可以愉快的秒了 var removeLeafNodes = function(root, target) { var dfs = function (root) { if (root.left) { root.left = dfs(root.left) } if (root.right) { root.right = dfs(root.right) } …
    Algorithms Created Wed, 17 Mar 2021 00:00:00 +1300
  • 用时: 偷偷看了答案 本来把问题想复杂了,想着维护一个最大堆,从上往下传递然后每次判断是否大于最大值 看了答案后发现只需要传递一个max,判断是否比max大,然后从下到上获取左右节点的值,返回左右节点和 加自身是否符合就好了 var goodNodes = function(root,max = root.val) { if (!root) return 0 var left = 0 max = …
    Algorithms Created Wed, 17 Mar 2021 00:00:00 +1300
  • 用时:6min 很简单,中序遍历,计算两边子树是否存在 1 的值,没有就去掉。凡事左右子树或者自身包含 1 ,返回 true 。否则返回 false var pruneTree = function(root) { var DFS = function (root) { if (!root) return false var left = DFS(root.left) var right = …
    Algorithms Created Wed, 17 Mar 2021 00:00:00 +1300
  • 看题型是求从根节点出发的,首先想到的是自顶向下的DFS,带着参数向下传递,结束条件没有左右儿子 直接前序遍历走起,可以认为是前面的节点都处理好了 var sumNumbers = function(root) { var ans = 0 var DFS = function (root,path) { if (!root) return path += root.val if …
    Algorithms Created Tue, 16 Mar 2021 00:00:00 +1300
  • 用时:15min 用时:15min 拿到题的第一反应是是用递归,然后直接开始写了后发现 递归需要满足的条件是问题可以拆分成子问题,但是根据题意,我们需要求的是每个节点左右节点和的差值,这个 “左右节点和” 对于每个节点来说,都是不一样的问题 所以还是双递归 var findTilt = function(root) { var total = 0 var innerDFS = function …
    Algorithms Created Tue, 16 Mar 2021 00:00:00 +1300
  • 用时 :30min 看懂题目的意思之后其实就能很快的做出来 题意是要求从任意节点出发的值,我们可以把每个节点的值求出来的过程中,选择最大的 又因为路径不能返回,可以知道我们出发的根节点的子节点的路径只能选择左或者右,或者都不要,结果为 x 求max 的时候再 把 x 和 左右都选的情况进行比较 var maxPathSum = function(root) { var max = …
    Algorithms Created Mon, 15 Mar 2021 00:00:00 +1300
Next