文章目录
- 1.[相同的树](https://leetcode-cn.com/problems/same-tree/)
- 2.[对称二叉树](https://leetcode-cn.com/problems/symmetric-tree/)
- 3.[二叉树的最大深度](https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/)
- 4[二叉树的最小深度](https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/)
- 5.[剑指 Offer 55 - II. 平衡二叉树](https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/)
1.相同的树
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==nullptr && q==nullptr) return true;
else if (p==nullptr||q==nullptr) return false;
else if(p->val!=q->val) return false;
else return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
};
2.对称二叉树
这个刚好可以利用上一题的函数。
class Solution {
public:
bool issametree(TreeNode* p,TreeNode* q){
if(p==nullptr && q==nullptr) return true;
else if(p==nullptr || q==nullptr) return false;
else if(p->val !=q->val) return false;
else return issametree(p->left,q->right) && issametree(p->right,q->left);
}
bool isSymmetric(TreeNode* root) {
if(root->left==nullptr &&root->right==nullptr) return true;
else return issametree(root->left,root->right);
}
};
3.二叉树的最大深度
class Solution {
public:
//递归 深搜
// int maxDepth(TreeNode* root) {
// if(root==nullptr) return 0;
// else return max(maxDepth(root->left),maxDepth(root->right))+1;
// }
//二叉树层次遍历 广搜
int maxDepth(TreeNode* root)
{
if(root==nullptr) return 0;
int depth=0;
q1.push(root);
TreeNode* p=nullptr;
while(!q1.empty()){
int sz=q1.size();
while(sz--){
p=q1.front();
q1.pop();
if(p->left) q1.push(p->left);
if(p->right) q1.push(p->right);
}
depth++;
}
return depth;
}
private:
queue<TreeNode*> q1;
};
4二叉树的最小深度
int minDepth(TreeNode* root) {
if(root==nullptr) return 0;
else if(root->left==nullptr) return minDepth(root->right)+1;
else if(root->right==nullptr) return minDepth(root->left)+1;
else return min(minDepth(root->left),minDepth(root->right))+1;
}
5.剑指 Offer 55 - II. 平衡二叉树
class Solution {
public:
int height(TreeNode* root){
if(root==nullptr) return 0;
return max(height(root->left),height(root->right)) +1;
}
int height1(TreeNode* root){
if(root==nullptr) return 0;
int l=height1(root->left);
int r=height1(root->right);
if(abs(l-r)>1 || l==-1 || r==-1){
return -1;
}
return max(l,r)+1;
}
bool isBalanced(TreeNode* root) {
//if(root==nullptr) return true;
//return abs(height(root->left) - height(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);
return (height1(root)!=-1);
}
};