【数据结构】二叉树OJ题_单值二叉树_相同的树

发布于:2024-07-25 ⋅ 阅读:(154) ⋅ 点赞:(0)

单值二叉树

题目

965. 单值二叉树 - 力扣(LeetCode)

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

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

示例 1:

输入:[1,1,1,1,1,null,1]
输出:true

示例 2:

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

题解:

1、树为NULL:返回ture

2、树不为NULL:左(右)子树不为NULL:判断左(右)子树是否等于根

3、没有满足条件的则返回true

bool isUnivalTree(struct TreeNode* root) {
    if(root==NULL){
        return true;
    }
//左子树不为NULL
    if(root->left){
         if(root->left->val!=root->val){
            return false;
         }
         if(isUnivalTree(root->left)==false){
            return false;
         }
    }
//右子树不为NULL
    if(root->right){
          if(root->right->val!=root->val){
            return false;
         }
         if(isUnivalTree(root->right)==false){
            return false;
         }
    }
    return true;
}

相同的树

题目

给你两棵二叉树的根节点 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

题解:

1、两棵树都为NULL,返回true

2、只有一棵树为NULL,返回false

3、都不为NULL,两棵树共同遍历

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    //同时进行,同时比较
if (p == NULL && q == NULL) {
        return true;
    } else if (p == NULL || q == NULL) {
        return false;
    }if(p->val!=q->val){
        return false;
    }
   else{
//简便写法
    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
//有一个false,整体为false;
//if(isSameTree(p->left,q->left)){
//return false;
//}   
//if(isSameTree(p->right,q->right)){
//return false;
//} 
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到