104. 二叉树的最大深度
递归
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
// 递归法
var maxDepth = function(root) {
const getHeight = function(node) {
if (node === null) return 0;
let leftHeight = getHeight(node.left);
let rightHeight = getHeight(node.right);
let maxHeight = 1 + Math.max(leftHeight, rightHeight);
return maxHeight;
}
return getHeight(root);
111. 二叉树的最小深度
下面这样写会超时
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var minDepth = function(root) {
const getMinHeight = function(node) {
if (node === null) return 0;
let leftHeight = getMinHeight(node.left);
let rightHeight = getMinHeight(node.right);
if (!node.left && node.right) return 1 + getMinHeight(node.right);
if (!node.right && node.left) return 1 + getMinHeight(node.left);
let minHeight = 1 + Math.min(leftHeight, rightHeight);
return minHeight;
}
return getMinHeight(root);
};
以下可以运行
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var minDepth = function(root) {
if (!root) return 0;
if (!root.left && !root.right) return 1;
if (!root.left) return 1 + minDepth(root.right);
if (!root.right) return 1 + minDepth(root.left);
let leftDepth = minDepth(root.left);
let rightDepth = minDepth(root.right);
let min = 1 + Math.min(leftDepth, rightDepth);
return min;
};
222. 完全二叉树的节点个数
递归
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
// 递归
var countNodes = function(root) {
if (!root) return 0;
let leftNum = countNodes(root.left);
let rightNum = countNodes(root.right);
let sumNum = leftNum + rightNum + 1;
return sumNum;
};
完全二叉树性质
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var countNodes = function(root) {
if (!root) return 0;
let left = root.left;
let right = root.right;
let leftHeight = 0, rightHeight = 0;
while (left) {
left = left.left;
leftHeight++;
}
while (right) {
right = right.right;
rightHeight++;
}
if (leftHeight === rightHeight) {
return Math.pow(2, leftHeight+1) - 1
}
let leftNum = countNodes(root.left);
let rightNum = countNodes(root.right);
let sumNum = leftNum + rightNum + 1;
return sumNum;
};