530. 二叉搜索树的最小绝对差
总体思路还是中序遍历,二叉搜索树相当于一个递增数组,最小差值只可能产生在两个相邻的值之中,统计前一个节点和当前节点的差值并不断更新即可
var getMinimumDifference = function(root) {
let dif = Infinity
let pre = null
let difFn = (root) => {
if(!root) return
difFn(root.left)
if(pre){
dif = Math.min(dif,Math.abs(pre.val - root.val))
}
pre = root
difFn(root.right)
}
difFn(root)
return dif
};
501. 二叉搜索树中的众数
自己第一遍过的时候的代码,感觉代码太冗余了 看题解了之后发现答案和我的解法差不多 但是if(res.indexOf(root.val) === -1)这个判断逻辑可以去掉,没什么用
var findMode = function(root) {
let maxTime = 0
let tempTime = 0
let res = []
let pre = null
let fn = (root) => {
if(!root) return
fn(root.left)
if(!pre){
tempTime++
}else{
if(pre.val === root.val){
tempTime++
}else{
tempTime = 1
}
}
if(tempTime > maxTime){
maxTime = tempTime
res = [root.val]
}else if(tempTime === maxTime){
if(res.indexOf(root.val) === -1){
res.push(root.val)
}
}
pre = root
fn(root.right)
}
fn(root)
return res
};
236. 二叉树的最近公共祖先
这题代码只有几行,但是不仔细思考的话是想不出来这个思路的
var lowestCommonAncestor = function(root, p, q) {
if(!root || root === p || root === q) return root
let left = lowestCommonAncestor(root.left,p,q)
let right = lowestCommonAncestor(root.right,p,q)
if(left && right) return root
return (left || right)
};