一、题意
二、思路
这道题需要用到二叉树高度这个概念,这里需要强调一下概念:
- 二叉树节点的深度:指从根节点到该节点的最长简单路径边数的条数。
- 二叉树节点的高度:指从 该节点到叶子节点的最长简单路径边的条数。
2.1递归法
同样是三部曲:
这里用 -1
来标记树不符合平衡树的规则。
class Solution { public: //1.明确函数参数和返回值 int getHeight(TreeNode* node) { //2.明确终止条件 if(node==NULL) return 0; //3.明确单层递归逻辑 //分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则则返回-1,表示已经不是二叉平衡树了。 int leftHeight=getHeight(node->left); if(leftHeight==-1) return -1; int rightHeight=getHeight(node->right); if(rightHeight==-1) return -1; int result; if(abs(rightHeight-leftHeight)>1) { result=-1; }else{ result=1+max(leftHeight,rightHeight); } return result; } bool isBalanced(TreeNode* root) { if(getHeight(root)==-1) { return false; }else{ return true; } } };