剑指 Offer 55 - I. 二叉树的深度
本题需要计算二叉树的深度,可以采用深搜也可以采用广搜
class Solution {
public:
int ans=0;int cnt=0;
void dfs(TreeNode* root,int p){//深搜
if(!root){ans=max(ans,p);return ;}
dfs(root->left,p+1);
dfs(root->right,p+1);
return ;
}
int maxDepth(TreeNode* root) {
/*int ans=0;//广搜程序为注释掉的
queue<TreeNode*>q;
if(!root) return ans;
q.push(root);
while(!q.empty()){
TreeNode* p=q.front();
q.pop();
int cal=q.size();
if(p->left) q.push(p->left);
if(p->right) q.push(p->right);
for(int i=0;i<cal;i++){
p=q.front();
q.pop();
if(p->left) q.push(p->left);
if(p->right) q.push(p->right);
}
ans++;
}
return ans;
*/
dfs(root,0);
return ans;
}
};
剑指 Offer 55 - II. 平衡二叉树
参考官方题解,从下往上计算深度,类似于后序遍历,当遇到任何一个子树不满足条件,则返回-1,否则返回高度
class Solution {
public:
int height(TreeNode* root) {
if (root == NULL) {
return 0;
}
int leftp = height(root->left);
int rightp = height(root->right);
if (leftp == -1 || rightp == -1 || abs(leftp - rightp) > 1) {
return -1;
} else {
return max(leftp, rightp) + 1;
}
}
bool isBalanced(TreeNode* root) {
return height(root) >= 0;
}
};