Q: Implement a function to check if a tree is balanced. For the purposes of this question, a balanced tree is defined to be a tree such that no two leaf nodes differ in distance from the root by more than one.
A: DFS.
当前节点为node,计算其左子树的高度left,和右子树的高度right, 如果abs(left-right) > 1,则不是平衡二叉树。
为了节省时间,因为会有子问题重复计算的情况,如果子树不是平衡二叉树,则将其高度置为1
#include <iostream>
#include <cmath>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void insert(TreeNode* root, int x){
if(root == NULL){
root = new TreeNode(x);
return;
}
if(x < root->val)
insert(root->left, x);
else
insert(root->right, x);
}
bool isBalance(TreeNode *root) {
if (!root) {
return true;
}
return isBalance(root) > -1;
}
int isBalanced(TreeNode *root) {
if (!root) {
return 0;
}
int left = isBalanced(root->left);
int right = isBalanced(root->right);
if (left < 0 || right < 0 || abs(left-right) > 1) {
return -1;
}
return max(left, right) +1;
}
int main() {
int a[10] = {5,1,2,3,4,6,7,8,9,0};
TreeNode *root = NULL;
for (int i = 0; i < 10; i++) {
insert(root, a[i]);
}
cout<<isBalance(root)<<endl;
}
本文介绍了一种使用深度优先搜索(DFS)的方法来判断一棵二叉树是否为平衡树。平衡树定义为任意两个叶子节点到根的距离之差不超过1的树。通过递归计算左右子树的高度并比较,若相差超过1则该树不平衡。
2万+

被折叠的 条评论
为什么被折叠?



