返回
日拱算法之《判断平衡二叉树》JS实现,树的稳固性测一测~
前端
2023-12-16 06:52:52
平衡二叉树是一种数据结构,其中每个节点的左右子树的高度差至多为1。这种性质确保了树的结构相对平衡,使得二叉查找、插入和删除操作的时间复杂度都为O(log n)。
判断平衡二叉树的算法需要遍历整棵树,并计算每个节点的左右子树的高度。如果左右子树的高度差超过1,则树不是平衡的。
以下是判断平衡二叉树的JavaScript代码实现:
function isBalanced(root) {
if (root === null) {
return true;
}
let leftHeight = height(root.left);
let rightHeight = height(root.right);
if (Math.abs(leftHeight - rightHeight) > 1) {
return false;
}
return isBalanced(root.left) && isBalanced(root.right);
}
function height(root) {
if (root === null) {
return 0;
}
let leftHeight = height(root.left);
let rightHeight = height(root.right);
return Math.max(leftHeight, rightHeight) + 1;
}
在上面的代码中,isBalanced()函数首先检查根节点是否为null。如果是,则树是平衡的。否则,它计算左右子树的高度差。如果高度差超过1,则树不是平衡的。然后,它递归地调用isBalanced()函数来检查左右子树是否平衡。
height()函数计算树的高度。它首先检查根节点是否为null。如果是,则树的高度为0。否则,它递归地调用height()函数来计算左右子树的高度。然后,它返回左右子树高度的最大值加1。
我们可以使用上面的代码来判断给定二叉树是否平衡。例如,以下代码判断二叉树是否平衡:
let root = new Node(10);
root.left = new Node(5);
root.right = new Node(15);
root.left.left = new Node(2);
root.left.right = new Node(7);
root.right.left = new Node(12);
root.right.right = new Node(20);
console.log(isBalanced(root)); // true
上面的代码创建了一个二叉树,然后使用isBalanced()函数来判断该树是否平衡。输出结果为true,表明该树是平衡的。