题解 | #平衡二叉树#
平衡二叉树
http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222
/*
描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
Note:
我们约定空树是平衡二叉树。
示例1
输入:
{1,2,3,4,5,6,7}
返回值:
true
*/
#include<iostream> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { return findH(pRoot) != -1; } int findH(TreeNode* pRoot) { if (pRoot == NULL) return 0; int a = findH(pRoot->left); int b = findH(pRoot->right); if (a == -1 || b == -1 || abs(a - b) > 1) return -1; else return (a > b ? a : b) + 1; } };