-
一道简单题目
-
统计各个节点左右子树的深度,然后两个深度的差值大于1的时候,返回false。然后接着比较左右子树的左右节点。
#include
#include
#include
#include
#include
using namespace std;
struct TreeNode
{
int val;
TreeNode lChild;
TreeNode rChild;
TreeNode(int val, TreeNodel = nullptr, TreeNoder = nullptr)
{
this->val = val;
this->lChild = l;
this->rChild = r;
}
};
TreeNode *create(int intarr[], int length, int i)
{
TreeNode *node = nullptr;if (i < length && intarr[i] != -1)
{
node = new TreeNode(intarr[i]);
node->lChild = create(intarr, length, i * 2 + 1);
node->rChild = create(intarr, length, i * 2 + 2);
}
return node;
}
bool isLeaf(TreeNode *node)
{
return (node->lChild == nullptr) && (node->rChild == nullptr);
}
int maxT(int a, int b)
{
if (a > b)
{
return a;
}
return b;
}
int getDepth(TreeNode *node)
{
if (!node)
{
return 0;
}
return maxT(getDepth(node->lChild), getDepth(node->rChild)) + 1;
}
bool BalancedBinaryTree(TreeNode *root)
{
if (!root)
{
return true;
}
if (!root->lChild && !root->rChild)
{
return true;
}
int leftDepth = getDepth(root->lChild);
int rightDepth = getDepth(root->rChild);
if (leftDepth > rightDepth + 1 || rightDepth > leftDepth + 1)
{
return false;
}
return BalancedBinaryTree(root->lChild) && BalancedBinaryTree(root->rChild);
}
int main()
{
int arr[7] = { 3,9,20,-1,-1,15,7 };
TreeNode *root = create(arr, 7, 0);
cout << BalancedBinaryTree(root) << endl;
system("pause");
return 0;
}