题目1 530. 二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
思路
一次ac通过,开森😄,思路上上一道做的题基本一样,中序遍历二叉树,记录前一个节点,如果上一个节点有值,则比较当前节点和上一个节点的差值,和最小差值做比较并记录。
var getMinimumDifference = function(root) {
let pre;
let min = Number.MAX_VALUE;
var inorder = root => {
if (!root) {
return
}
inorder(root.left);
if (pre) {
let diff = Math.abs(root.val - pre.val);
if (pre && diff < min) {
min = diff;
}
}
pre = root;
inorder(root.right);
}
inorder(root);
return min;
};
题目二 501. 二叉搜索树中的众数
思路
利用二叉树的特性,依然使用pre指针,指向上一个元素,
单层递归逻辑:
-
如果pre没有,说明是第一个元素,count = 1;如果pre = cur,则count++,否则,count 重新开始计数变为1。
-
计算完当前node的count后,判断count和max的大小,如果大于,则result清空,放进当前元素,如果等于,则push当前元素。
其余就是递归逻辑。
var findMode = function(root) {
let result = [];
let maxCount = 0;
let count = 0;
let pre;
if (!root.left && !root.right) {
return [root.val];
}
var inorder = root => {
if (!root) {
return;
}
inorder(root.left);
if (!pre) {
count = 1;
} else if (root.val === pre.val) {
count++;
} else {
count = 1;
}
pre = root;
if (count > maxCount) {
maxCount = count;
result = [root.val]
} else if (count === maxCount) {
result.push(root.val);
}
inorder(root.right);
}
inorder(root);
return result;
};
题目三 236. 二叉树的最近公共祖先
思路
如果遇到p,则返回p,如果遇到q,返回q,如果左右子树返回之都不为空,说明找到了最近公共祖先,如果为空,右不为空,返回右节点,如果左不为空,右为空,返回左节点。
var lowestCommonAncestor = function(root, p, q) {
if (!root) {
return root;
}
if (root === p || root === q) {
return root;
}
const left = lowestCommonAncestor(root.left, p, q);
const right = lowestCommonAncestor(root.right, p, q);
if (left && right) {
return root;
}
if (left && !right) {
return left;
}
if (!left && right) {
return right
}
};