用时 :30min 看懂题目的意思之后其实就能很快的做出来 题意是要求从任意节点出发的值,我们可以把每个节点的值求出来的过程中,选择最大的 又因为路径不能返回,可以知道我们出发的根节点的子节点的路径只能选择左或者右,或者都不要,结果为 x 求max 的时候再 把 x 和 左右都选的情况进行比较 var maxPathSum = function(root) { var max = …
用时:120min 一开始的思路是用BFS,出队时出一整队(后来知道这叫宽度遍历) 然后双指针找到左右节点。当左右节点都不存在时结束 var widthOfBinaryTree = function(root) { var que = [root] var max = 0 while(que.length) { var len = que.length var left = 0 var right …
用时 10min 直接用二叉搜索树中序遍历递增的性质就好了 中序遍历找到左孩子 pre 是否存在 不存在,赋值 ,找右孩子,返回 1 存在,是否比 val 小 是,非递增,返回 false 否,递增,赋值 pre ,返回 1 var isValidBST = function(root) { var preVal = null var DFS = function(root) { var left …
用时:60min 思路还是中序遍历,使用pre缓存前一个节点,因为中序遍历是递增的,所以一定是先找到大的,再找到小的。 所以第一个出问题的是pre,第二个是root var recoverTree = function(root) { var left = null var right = null var pre = null // 一定是先找到大的,再找到小的,所以第一个出问题的是pre,第二 …
用时 :25min 主要思路是利用栈,和普通的层序遍历不同的是每次都把栈清空 var connect = function(root) { if (!root) return null var stack = [root] while(stack.length) { var _stack = [...stack,null] stack = [] var pre = _stack.shift() …