Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >题目描述

题目描述

作者头像
WeiMLing
发布于 2022-05-06 08:12:59
发布于 2022-05-06 08:12:59
38501
代码可运行
举报
文章被收录于专栏:WeiMLingWeiMLing
运行总次数:1
代码可运行

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

一 . 二叉树的概念

树形结构是一种典型的非线性结构,除了用于表示相邻关系外,还可以表示层次关系。每个结点最多有两棵子树。左子树和右子树是有顺序的,次序不能任意颠倒。即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。即为下图。。

C#定义二叉树:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class BinaryTreeNode
    {
        //节点
        public int Data { get; set; }
        //左子树
        public BinaryTreeNode leftChild { get; set; }
        //右子树
        public BinaryTreeNode rightChild { get; set; }
        //数据域
        public BinaryTreeNode(int data)
        {
            this.Data = data;
        }
         //指针域
        public BinaryTreeNode(int data, BinaryTreeNode left, BinaryTreeNode right)
        {
            this.Data = data;
            this.leftChild = left;
            this.rightChild = right;
        }
    }

二 . 题目分析

        A-B两个二叉树,判断B是否为A的子结构。

        想法:该题使用递归法。步骤为:在树A中找到和B的根结点的值一样的结点;判断以该节点为中心的左右子树是否相同,相同即为子结构,不同继续递归,直到结束。

三 . 代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution
{
    public bool HasSubtree(TreeNode pRoot1, TreeNode pRoot2)
    {
        // write code here
        if(pRoot1 == null || pRoot2 == null)
        {
            return false;
        }
        else
        {
            return Judge(pRoot1,pRoot2);
        }
    }
    public static bool Judge(TreeNode pRoot1, TreeNode pRoot2)
    {
        //解释说是pRoot2如果全部遍历完且与pRoot1一一对应,则返回正确
        //如果pRoot2还没遍历完,而pRoot1已经遍历结束,则错误。
         if (pRoot2 == null)
         {   
             //递归成功条件,什么意思呢,比如B仅有一个节点,且存在和A一样的节点,那肯定是是咯
             return true;
         }
         if (pRoot1 == null)
         {
             //递归失败条件,如果你一直递归下去,A都结束了,还没找到,那肯定不是咯。
             return false;
         }
         if (pRoot1.val == pRoot2.val)
         {
             //递归成功条件2,左右节点都一样
             if (Judge(pRoot1.left,pRoot2.left) && Judge(pRoot1.right,pRoot2.right))
             {
                 return true;
             }
         }
         //递归
         return Judge(pRoot1.left,pRoot2) || Judge(pRoot1.right,pRoot2);
     }
}

PS:该题考点依旧是代码的鲁棒性,所以要格外注意,其实貌似就这么一处吧if(pRoot1 == null || pRoot2 == null)。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
每日算法题:Day 9
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
算法工程师之路
2019/08/13
3630
每日一题 剑指offer(树的子结构)
编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化和锻炼自己的编程能力(最起码不会忘记编程)
小白学视觉
2019/10/24
2420
C++版 - 剑指offer 面试题18: 树的子结构(LintCode 245.Subtree) 题解
题目: 树的子结构 热度指数:9608 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/6e196c44c7004d
Enjoy233
2019/03/05
4560
[PHP] 算法-二叉树的子结构判断的PHP实现
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 1.子树的意思是包含了一个节点,就得包含这个节点下的所有节点,两棵树同时到底 2.子结构可以是A树的任意一部分 思路: 1.第一个递归:A和B两棵树,先在A中找到与B的根结点相同的点,如果A的根不是,那就递归A的左右子树来找 2.第二个递归:从两棵树的根结点开始进行比较,遍历的过程中,如果B树为空,则返回true;如果B不为空,A为空,返回false A树的结点值与B树的不同,返回fa
唯一Chat
2019/09/10
3560
剑指offer - 树的子结构 - JavaScript
题目描述:输入两棵二叉树 A,B,判断 B 是不是 A 的子结构。(ps:我们约定空树不是任意一个树的子结构)。
心谭博客
2020/04/21
6480
剑指Offer面试题:17.树的子结构
  为了方便测试,这里封装了一个设置指定根节点的左孩子和右孩子节点的方法:SetSubTreeNode
Edison Zhou
2018/08/20
4020
剑指Offer面试题:17.树的子结构
腾讯课堂 IMWeb 七天前端求职提升营 Day 3
本次的系列博文主要是针对 腾讯课堂七天前端求职提升营 课程中,所推送的面试题目及编程练习的一次汇总,期间还包括三次直播课的分享,均由腾讯导师给大家讲解,该系列博文的发布已得到 IMWeb 前端学院助教的许可
Nian糕
2018/08/21
6270
腾讯课堂 IMWeb 七天前端求职提升营 Day 3
【Go】剑指offer:二叉树子树的判断
对于这个题,首先我们需要知道二叉树的创建,二叉树的种类有很多,这一题中我们先回顾一下二叉树的基本知识,以二叉查找树为例。
陌无崖
2020/07/27
8630
二叉树常见面试题
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
河马嘴不大
2022/12/24
2290
剑指offer【20~29】
方法1:使用正则表达式,格式为 import re,re.match(r"^...$", s) ,其中 ^ 表示匹配 s 的开始,$ 表示匹配 s 的结尾,... 就是自己写的表达式。匹配成功会返回一个对象,则为 True,否则为 False。
echobingo
2019/12/20
3460
判断一颗树是不是另一棵树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
梦飞
2022/06/23
2730
树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。 二叉树结点的定义如下: struct BinaryTreeNode { int m_nValue; Bin
猿人谷
2018/01/17
5650
树的子结构
算法题目(三)
第一步在树A中查找与根结点的值一样的结点,这实际上就是树的遍历。递归调用HasSubTree遍历二叉树A。如果发现某一结点的值和树B的头结点的值相同,则调用DoesTreeHavaTree2,做第二步判断。
Helloted
2022/06/06
3160
剑指offer--树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
AI那点小事
2020/04/20
2200
剑指Offer面试题:18.二叉树的镜像
Step1.先序遍历原二叉树的每个节点,如果遍历到的结点有子结点,就交换它的两个子结点。
Edison Zhou
2018/08/20
2680
剑指Offer面试题:18.二叉树的镜像
Sword To Offer 017 - 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
Reck Zhang
2021/08/11
1710
剑指Offer面试题:33.二叉树的深度
  ②如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。
Edison Zhou
2018/08/20
3520
剑指Offer面试题:33.二叉树的深度
剑指Offer面试题:25.二叉搜索树与双向链表
  首先,我们知道:在二叉树中,每个结点都有两个指向子结点的指针。在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个结点。
Edison Zhou
2018/08/20
4380
剑指Offer面试题:25.二叉搜索树与双向链表
剑指offer-JavaScript版(12-22题)
12.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
前端迷
2019/10/29
3270
数据结构之二叉树
二叉树的定义: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要
xiangzhihong
2018/02/01
6820
数据结构之二叉树
相关推荐
每日算法题:Day 9
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验