📅  最后修改于: 2023-12-03 14:55:50.639000             🧑  作者: Mango
在二叉树中,如果每个节点要么没有子节点,要么同时有两个子节点,那么这棵树就被称为完美二叉树。在本文中,我们将讨论如何检查给定的二叉树是否是完美二叉树。
完美二叉树具有以下特性:
我们可以使用递归的方式来检查给定的二叉树是否是完美二叉树。对于每个节点,我们可以递归地检查其左子树和右子树是否满足完美二叉树的条件。如果左子树和右子树都是完美二叉树且左右子树的高度相同,则该二叉树是完美二叉树。
下面是使用 JavaScript 实现的二叉树节点和检查完美二叉树的函数:
// 二叉树节点的定义
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
// 检查二叉树是否是完美二叉树
function isPerfectBinaryTree(root) {
// 辅助函数:计算二叉树的高度
function height(node) {
if (node === null) {
return 0;
}
return 1 + Math.max(height(node.left), height(node.right));
}
// 辅助函数:检查二叉树是否是完美二叉树
function checkPerfect(node, h, level = 1) {
if (node === null) {
return true;
}
if (node.left === null && node.right === null) {
// 叶子节点必须在最底层
return h === level;
}
if (node.left === null || node.right === null) {
// 非叶子节点必须同时有左右子节点
return false;
}
return (
checkPerfect(node.left, h, level + 1) &&
checkPerfect(node.right, h, level + 1)
);
}
const h = height(root);
return checkPerfect(root, h);
}
// 创建一个完美二叉树
const root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
// 检查二叉树是否是完美二叉树
const isPerfect = isPerfectBinaryTree(root);
console.log(isPerfect); // true
以上代码实现了二叉树节点的定义以及检查给定二叉树是否是完美二叉树的函数。我们创建了一个完美二叉树并通过调用函数进行检查,最终返回了结果 true
。
以上就是使用 JavaScript 检查给定二叉树是否是完美二叉树的介绍。代码片段中使用了递归来实现检查的过程,并给出了算法的详细思路。你可以根据自己的需求进行修改和拓展。