学习几道树的题

1.100. 相同的树 - 力扣(LeetCode)

第一道,检查两棵树是否相同

像这样的树,我们如何确定他们是相同的,肯定是层层访问,检查字节点的值是不是相同的。那我们肯定要遍历,用递归层层遍历。递归,前序遍历,前序遍历,根,左子树,右子树。好的我们来试试。

首先我们在树的学习中,遍历树,遇到空就要结束返回,这是肯定的,我们遍历到了两棵树的结点,如果一棵树的结点已经是空了,而另一棵树不是空,那肯定不相同。两棵树都一样的递归遍历下,都遇到了空结点,那么可以说是一致的,遇到空开始递归开始往回走,来到2 这一层,然后检查两棵树的val的值是否相同,如果相同怎么办,只能接着遍历,但是我们可以用不相同作遍历条件,不相同直接返回false;接着就是层层递归检查了,如果最后左子树和右子树都相同,最后则返回true;

复制代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
    return true;
    if(p==NULL||q==NULL)
    return false;
    if(q->val!=p->val)
    return false;
    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);

}

2.572. 另一棵树的子树 - 力扣(LeetCode)

subRoot是不是root的子树,如果是它的子树,那不就是root的树里的子树面有没有和subRoot相同的,那这样的话,我们刚才写的相同子树的那道题不就可以用了。如果我们开始遍历root,当root一个结点的值和我们subRoot 这个树的根结点相同的时候,那么我们就把root的结点和subRoot的结点传递给isSameTree刚才那道题写的函数中,这样的话,那我们说一下遍历root的思路。开始遍历,也就是root到空指针的时候,subRoot也得是空,否则就肯定不是一样的树了,当然左子树和右子树都不一致才能这么说。所以我们用||来作为判断条件。如果都是空,那么就是true啦。当遇到值相同的时候,开始isSameTree。

复制代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
    return true;
    if(p==NULL||q==NULL)
    return false;
    if(q->val!=p->val)
    return false;
    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);

}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
    
   if(root==NULL&&subRoot==NULL)
   {
    return true;
   }
   if(root==NULL||subRoot==NULL)
   {
    return false;
   }
 if(root->val==subRoot->val)
 { 
   if(isSameTree(root,subRoot))
   return true;
 }
    
  return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

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

如果值都相同的话就是单值树,如果有不同的话就返回false。那开始递归遍历就好了,如果是单值二叉树的话,子树的结点一定会等于根结点的,所以只要每次和根结点比就行了,递归到最后一层是空的情况就是true,遍历完都相同就是true,如果有不相同的情况就是false;

复制代码
bool isUnivalTree(struct 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);
}
相关推荐
xian_wwq5 分钟前
【学习笔记】Agent 安全护栏 —— 当 Agent DROP TABLE 了你的生产数据库-07/15
笔记·学习·安全
lichuangcsdn1 小时前
【Spring AI 学习(一)】spring ai是什么
人工智能·学习·spring·spring ai
MartinYeung51 小时前
[论文学习]AgentDojo:用于评估LLM智能体提示注入攻击与防御的动态环境
网络·学习
minglie12 小时前
蚂蚁S9矿板PS led驱动的三个实验-第1课 字符设备驱动
学习
江南十四行2 小时前
Maven 学习框架:依赖管理 + 仓库配置 + IDEA 集成
学习·maven·intellij-idea
其实防守也摸鱼3 小时前
镜像校验完成iso完整操作流程(Windows 环境,适配 Ubuntu 22.04 / 24.04)
linux·服务器·windows·学习·ubuntu·教程
艾莉丝努力练剑3 小时前
【MYSQL】MYSQL学习的一大重点:基本查询(下)
android·数据库·学习·mysql·面试·八股文
晓梦林3 小时前
[极客大挑战 2019]Secret File学习笔记
笔记·学习
STLearner4 小时前
ICML 2026 | LLM×Graph论文总结[2]【Graph4LLM,Graph4Agent,智能体记忆(Memory)
大数据·人工智能·python·深度学习·学习·机器学习·数据挖掘
其实防守也摸鱼5 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·运维·网络·人工智能·学习·安全·macos