平衡二叉树的判定
时间: 2023-06-21 17:16:48 浏览: 122
判断一个二叉树是否为平衡二叉树,可以通过递归的方式来实现。对于每个节点,先递归判断其左右子树是否为平衡二叉树,如果左右子树都是平衡二叉树,则比较左右子树的高度差,如果高度差小于等于1,则该节点也是平衡二叉树,否则不是。具体实现可以参考以下伪代码:
```
// 定义二叉树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isBalanced(TreeNode* root) {
if (root == NULL) {
return true;
}
// 递归判断左右子树是否为平衡二叉树
bool leftBalanced = isBalanced(root->left);
bool rightBalanced = isBalanced(root->right);
if (leftBalanced && rightBalanced) {
// 如果左右子树都是平衡二叉树,则比较左右子树的高度差
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
if (abs(leftHeight - rightHeight) <= 1) {
return true;
}
}
return false;
}
// 计算二叉树的高度
int getHeight(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftHeight = getHeight(root->left);
int rightHeight = getHeight(root->right);
return max(leftHeight, rightHeight) + 1;
}
```
阅读全文