C++ 判断是不是平衡二叉树
一:题目
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
样例解释:
二:实现:
解题思路:
- 使用递归来遍历每个节点,计算左右子树的高度。
- 如果左右子树的高度差超过 1,直接返回 false。
- 如果某一子树不是平衡的,直接返回 false。
- 同时递归地返回当前子树的高度。
#include <iostream>
#include <algorithm>
#include <functional>struct TreeNode
{int val;TreeNode* left; TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};bool isBalanced(TreeNode* root)
{std::function<int(TreeNode*)> height = [&](TreeNode* node) -> int {if (node == nullptr){return 0;}int leftHeight = height(node->left);if (leftHeight == -1) return -1;int rightHeight = height(node->right);if (rightHeight == -1) return -1;if (std::abs(leftHeight - rightHeight) > 1){return -1;}return std::max(leftHeight, rightHeight) + 1;};return height(root) != -1;
}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->left->left->left = new TreeNode(6);// 判断树是否平衡if (isBalanced(root)) {std::cout << "The tree is balanced." << std::endl;}else {std::cout << "The tree is not balanced." << std::endl;}
}