题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
提交链接:点击
思路:
方法一:首先根据平衡二叉树的定义,要么为空树,要么它的左右子树高度相差小于1且左右子树也为平衡二叉树。于是肯定需要的是计算该树的高度,很容易的递归求解树的高度。对左右子树分别求解高度,如果不大于1,则返回是平衡二叉树,否则,不是平衡二叉树。这是最容易想到的办法,不足的是针对每个结点都进行递归求解高度,复杂度高些。
方法二:在递归求解树的高度的过程中,判断左右子树的高度相差是否小于1,如果大于,直接返回不是平衡二叉树。可以有剪纸的操作。
代码:
class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { //要么是空树,要么左右子树高度小于1,左右子树分别为平衡二叉树 if(!pRoot) return true; int left=TreeDepth(pRoot->left); int right=TreeDepth(pRoot->right); if(abs(left-right)>1) return false; return true; } int TreeDepth(TreeNode *pRoot){ if(!pRoot) return 0; int left=TreeDepth(pRoot->left); int right=TreeDepth(pRoot->right); return left>right?left+1:right+1; } };