平衡二叉树
平衡二叉树
http://www.nowcoder.com/questionTerminal/8b3b95850edb4115918ecebdf1b4d222
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
解法
//解法:后序遍历+减枝 // 时间O(N) 空间O(N) bool IsBalanced_Solution(TreeNode* pRoot) { if (pRoot == nullptr) return true; return RecIsBalanced(pRoot) != -1; } //递归看root及其子树是否为平衡二叉树。若是,返回root树高;若任意子树不是,则返回-1(剪枝). int RecIsBalanced(TreeNode* pRoot) { if (pRoot == nullptr) return 0; int left = RecIsBalanced(pRoot->left); if (left == -1) return -1; int right = RecIsBalanced(pRoot->right); if (right == -1) return -1; if (abs(left - right) > 1) return -1; else return max(left, right) + 1; }