返回

日拱算法之《判断平衡二叉树》JS实现,树的稳固性测一测~

前端

平衡二叉树是一种数据结构,其中每个节点的左右子树的高度差至多为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,表明该树是平衡的。