学习算法,锻炼自我!记录自己的成长过程!
给定一个二叉树,判断它是否是高度平衡的二叉树。
这道题我个人觉得主要在于如何获取高度,递归遍历每个节点来获取当前节点,而在此使用广度优先遍历在每一层级遍历完之后高度+1的方式来计算当前节点的左右高度,
var isBalanced = function (root) {
if (!root) {
return true;
};
//使用广度优先遍历来计算高度
//当遍历完一层之后高度+1
const getHeight = (node) => {
if (!node) {
return 0;
};
let height = 0;
const queue = [node];
while (queue.length) {
let len = queue.length;
while (len--) {
const r = queue.shift();
if (r.left) {
queue.push(r.left);
};
if (r.right) {
queue.push(r.right);
};
};
height++;
};
return height;
};
const dfs = (node) => {
//当递归到之后的时候就没有问题
if (!node) {
return true;
};
//首先以当前节点为头,判断它的左右高度
const left = getHeight(node.left);
const right = getHeight(node.right);
return Math.abs(left - right) <= 1
//同时判断以左节点为头,它的左右高度,依次往下判断
&& dfs(node.left)
//判断以右节点为头,它的左右高度,依次往下判断
&& dfs(node.right);
};
return dfs(root);
};