用时 : 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 …
用时: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 && …
用时: 偷偷看了答案 本来把问题想复杂了,想着维护一个最大堆,从上往下传递然后每次判断是否大于最大值 看了答案后发现只需要传递一个max,判断是否比max大,然后从下到上获取左右节点的值,返回左右节点和 加自身是否符合就好了 var goodNodes = function(root,max = root.val) { if (!root) return 0 var left = 0 max = …
用时:6min 很简单,中序遍历,计算两边子树是否存在 1 的值,没有就去掉。凡事左右子树或者自身包含 1 ,返回 true 。否则返回 false var pruneTree = function(root) { var DFS = function (root) { if (!root) return false var left = DFS(root.left) var right = …
看题型是求从根节点出发的,首先想到的是自顶向下的DFS,带着参数向下传递,结束条件没有左右儿子 直接前序遍历走起,可以认为是前面的节点都处理好了 var sumNumbers = function(root) { var ans = 0 var DFS = function (root,path) { if (!root) return path += root.val if …
用时:15min 用时:15min 拿到题的第一反应是是用递归,然后直接开始写了后发现 递归需要满足的条件是问题可以拆分成子问题,但是根据题意,我们需要求的是每个节点左右节点和的差值,这个 “左右节点和” 对于每个节点来说,都是不一样的问题 所以还是双递归 var findTilt = function(root) { var total = 0 var innerDFS = function …
用时:20min 因为是求 ” 每个节点出发的为sum的路径” 很明显就想到了回溯,因为是二叉树,所以就双递归。 外层递归用来找到所有的节点,内层用来算节点的路径 var pathSum = function(root, sum) { var res = 0 var dfs = function (root,total,visited) { if (!root) return if (total …