从底部向上递归高度,若为空节点则返回0,否则返回左右孩子的最大高度+1。再进行高度检查即可,若子树高度差大于1则设置 flag 为 false ,直接退出即可。
递归基:遇到空节点,返回0;
AC代码:(ps.这种递归还是有点耗费空间。。)
bool flag = 1; unsigned check(TreeNode const *root) { if (!flag || !root) return 0; int ld = check(root->left), rd = check(root->right); if (ld - rd > 1 || rd - ld > 1) { flag = 0; return 0; } else return 1 + (ld >= rd ? ld : rd); } bool isBalanced(TreeNode *root) { check(root); return flag; }