2021-11-1每日刷题打卡

一、LeetCode:101. 对称二叉树

(1)题目描述

        

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
 

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3


(2)题目分析

        这道题是找对称二叉树,也算树的基础题了,只要树的左子树和右子树的节点值相同,树的深度相同即可,所以我们可以采用递归的方法,左边节点与右边节点对比(对称性)。

(3)代码实现

        

class Solution {
public:
    bool check(TreeNode *p, TreeNode *q) {
        if (!p && !q) return true;
        if (!p || !q) return false;
        return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);
    }

    bool isSymmetric(TreeNode* root) {
        return check(root, root);
    }
};

二、LeetCode:100. 相同的树

(1)题目描述

        

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:


输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:


输入:p = [1,2], q = [1,null,2]
输出:false
示例 3:


输入:p = [1,2,1], q = [1,1,2]
输出:false
 

(2)题目分析

        这道题跟上一个题对称二叉树差不多,比较节点的时候左边跟右边比(对称二叉树),而相同的树是左边跟左边,右边跟右边比

(3)代码实现

        

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p==NULL&&q==NULL){
            return true;
        }else if(p==NULL||q==NULL){
            return false;
        }else if(p->val!=q->val){
        return false;
    }else{
        return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
    }
    }
};

 三、LeetCode:965. 单值二叉树

(1)题目描述

        

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false。

示例 1:

输入:[1,1,1,1,1,null,1]
输出:true
示例 2:

输入:[2,2,2,5,2]
输出:false

(2)题目分析

        这道题主要求树的所有结点的值,也就是代码中的val,就比较左右子树跟根节点的值即可

(3)代码实现

        

class Solution {
public:
    bool isUnivalTree(TreeNode* root) {
        if(root==NULL){
            return true;
        }
        if(root->left!=NULL&&root->left->val!=root->val){
            return false;
        }
        if(root->right!=NULL&&root->right->val!=root->val){
            return false;
        }
        return isUnivalTree(root->left)&&isUnivalTree(root->right);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值