LeetCode1448 统计二叉树中好节点的数目
题目
解题
解题一:深度优先搜索
// javascript
var goodNodes = function(root) {
// 统计好节点的个数
let goodNodeCnt = 0;
const dfs = (root, maxValAbove) => {
if (root === null) return;
// maxValAbove 用于记录从顶层递归到本层的最大节点值
// 若该节点值大于 maxValAbove 说明该节点值不小于该节点到根节点路径上所有节点的值
if (root.val >= maxValAbove) {
goodNodeCnt++;
maxValAbove = root.val;
}
dfs(root.left, maxValAbove);
dfs(root.right, maxValAbove);
}
dfs(root, -Infinity);
return goodNodeCnt;
};
解题二:广度优先搜索
// javascript
var goodNodes = function(root) {
if (root === null) return 0;
let goodNodeCnt = 0;
const queue = new Array();
queue.push([root, root.val]);
while (queue.length > 0) {
// maxVal 记录的是从根节点到当前 node 路径上的最大节点值(包括 node)
let [node, maxVal] = queue.shift();
if (node.val >= maxVal) {
goodNodeCnt++;
}
if (node.left !== null) {
queue.push([node.left, Math.max(maxVal, node.left.val)]);
}
if (node.right !== null) {
queue.push([node.right, Math.max(maxVal, node.right.val)]);
}
}
return goodNodeCnt;
};