用c++写一下判断二叉树是不是二叉平衡树的算法
时间: 2023-12-19 07:04:42 浏览: 198
判断该树是不是平衡二叉树.md
以下是用 C++ 编写的判断二叉树是否为平衡二叉树的算法:
```cpp
#include<iostream>
#include<algorithm>
using namespace std;
// 定义二叉树结点
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 计算树的高度
int height(TreeNode* root) {
if (root == NULL) {
return 0;
}
return max(height(root->left), height(root->right)) + 1;
}
// 判断是否为平衡二叉树
bool isBalanced(TreeNode* root) {
if (root == NULL) {
return true;
}
int leftHeight = height(root->left); // 左子树高度
int rightHeight = height(root->right); // 右子树高度
if (abs(leftHeight - rightHeight) > 1) { // 根据定义判断是否平衡
return false;
}
return isBalanced(root->left) && isBalanced(root->right); // 递归判断左右子树是否平衡
}
int main() {
// 测试用例
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
cout << isBalanced(root) << endl; // 输出 1,即为 true
return 0;
}
```
算法思路:
1. 定义结构体 `TreeNode` 来表示二叉树结点。
2. 定义函数 `height()`,用于计算树的高度。如果结点为空,则返回 0;否则,递归计算左右子树的高度,取较大值加 1 即可。
3. 定义函数 `isBalanced()`,用于判断是否为平衡二叉树。如果结点为空,则返回 true;否则,计算左右子树的高度差,如果大于 1,则不满足平衡条件,返回 false;否则,递归判断左右子树是否平衡即可。
4. 在 `main()` 函数中,创建一个二叉树并测试算法的正确性。
阅读全文