面试经典(8)--树的子结构

【数据结构与算法_java】面试题及答案汇总 文章目录一、剑指offer:50道金典面试题题目1:赋值运算符函数面试题2:实现单例模式面试题3:二维数组中的查找二、LeetCode上经典题目三、其他金典面试题 前    言 本文将收录《剑指offer:50道金典面试题》、LeetCode上部分经典题目以及其他【据结构和算法】数面试题。 PS:持续更新中,敬请期待~~ 正    文 一、剑指offer:50道金典面试题 题目 阅读详情

题目描述:输入俩棵二叉树A和B,判定B是不是A的子结构

                 1                                                   8
               /    \                                               /    \
              8    7                                             9    2
            /    \
           9    2
                /  \
               4  7

右边的二叉树是左侧的子结构

算法分析:这个题目是微软2010年的校招题目,使用前序遍历,可以加深对前序遍历的理解。大概思想是:我们前序遍历A,如果当前节点值和B的根节点相同,然后我们判定A是否含B。因此,首先要写一个函数bool subtree(Node *pRoot1,Node *pRoot2);判定以pRoot1为根节点的树是否包含以pRoot2为根节点的树。

代码如下:

bool subtree(Node *pRoot1,Node *pRoot2)
{
	if(pRoot2==NULL)
		return true;
	if(pRoot1==NULL)
		return false;
	if(pRoot1->m_chValue!=pRoot2->m_chValue)
		return false;
	return subtree(pRoot1->m_pLeft,pRoot2->m_pLeft) && subtree(pRoot1->m_pRight,pRoot2->m_pRight);
}

上面代码可谓"精简彪悍"。一是if(pRoot2==NULL)return true必须放在第二个判定条件if(pRoot1==NULL)之前。最后的返回语句相当吊。这用到的一个c语言的一个知识点:比如a<b && c<d,如果a>=b,后边的语句c<d是不会执行的。所以如果左子树返回false,那不会递归调用右子树,这正是我们需要的。

下面开始分析对A树的递归遍历算法。话不多说上图!


上图用来理解正确逻辑(A中包含B),下图是用来理解错误逻辑(A中不包含B)。

代码如下:

bool isSubTree(Node *pRoot1,Node *pRoot2)
{
	if(pRoot2==NULL)
		return false;
	if(pRoot1==NULL)
		return false;
	bool found=false;
	if(pRoot1->m_chValue==pRoot2->m_chValue)
		found=subtree(pRoot1,pRoot2);
	if(!found)
		found=isSubTree(pRoot1->m_pLeft,pRoot2);
	if(!found)
		found=isSubTree(pRoot1->m_pRight,pRoot2);
	return found;
}


✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub 构建一个带 GPU 支持的深度学习开发镜像;使用 PyTorch 2.5.1(CUDA 12.4)环境;发布并托管 Docker 镜像至 Docker Hub;验证 GPU 环境正常运行!🎉 这将极大提升你的项目部署效率,尤其是在多人协作或跨平台部署场景中。 阅读详情

相关推荐

【Creo】关于Creo一换网络就报错许可证丢失问题解决方案

依照我的个人理解,Creo只要一更换网络,则其许可证里面的网卡参数和现在的网络就对不上了,所以就会出现报错,并且有可能是报错代码(-9),提示许可证激活有问题。

weixin_52002180的博客 6036

图解常见树结构

目录二叉树二叉查找树退化问题平衡树二叉平衡搜索树(AVL 树)2-3 树2-3-4 树B 树红黑树左旋/右旋 保持红黑树的结构应用 二叉树 满足以下两个条件的树就是二叉树: 本身是有序树。 树中包含的各个节点的度不能超过 2,即只能是 0、1、2。 分支被称作“左子树”或“右子树”。 二叉查找树 二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具

QiuHaoqian的博客 1万+

Allegro中调整差分对等长的步骤介绍

【代码】Allegro中调整差分对等长的步骤介绍。

qq_30882617的博客 3832

树结构大全

文章目录说明树结构的一些基本定义树结构的性质二叉树二叉树的定义满二叉树与完全二叉树二叉树的性质结点定义二叉树的创建二叉树的遍历基于深度遍历二叉树基于层次遍历二叉树(方法一)基于层次遍历二叉树(方法二)二叉树的深度(方法一)二叉树的深度(方法二)二叉树叶子结点个数二叉排序树四叉树八叉树kd 树红黑树哈夫曼树 说明 树结构的一些基本定义 示意图 结点的度:结点拥有的子树的数目。eg:结点 A ...

Neverland_LY‘s Domain 2万+

从AT指令到万物互联:移远EG800K-CN模块的协议栈深度解析与实践指南

本文深度解析移远EG800K-CN 4G模块的协议栈架构与AT指令体系,涵盖MQTT云端集成、多协议配置优化及工业级故障排除指南。通过实战示例展示如何利用该模块构建稳定可靠的物联网连接方案,实现从设备到云端的万物互联。

jupyter5notebook的博客 361

从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(上)

SimpleBGC是一款开源的稳定云台控制系统,相比专业设备具有显著的价格优势(仅为1/5-1/10),采用模块化设计支持全场景适配。系统包含硬件设计、软件代码和算法三大核心:硬件采用STM32主控和IMU传感器,支持6步换向和FOC电机驱动;软件采用三层架构(驱动层、算法层、应用层),实现姿态解算和PID控制;算法方面提供互补滤波(基础版)和卡尔曼滤波(高端版),可达到±0.5°至±0.1°的稳定精度。该系统适用于无人机航拍、工业检测等多种应用场景,特别适合DIY开发者和中小企业进行定制化开发。

bother3000的博客 3682

经典树结构-红黑树

转载自“教你初步了解红黑树” 算法导论上对红黑树的评价: 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 文章目录二叉查找树二叉树的插入红黑树红黑树的5个性质:树的旋转知识红黑树的插入和插入修复 二叉查找树 二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树

c630843901的博客 230

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

经典树型表结构

为什么80%的码农都做不了架构师?>>> ...

weixin_33711647的博客 335

Oracle EBS FA 如何打开关闭的资产会计期间?

用户“运行折旧”,误勾选为“关闭期间”,还有一部分资产还需要操作报废和调整,希望后台打开关闭的资产会计期。

陈显平的专栏-Oracle EBS 1027

25杰瑞机械工程师面试经验机械面试问题总结技巧面试全攻略

作为一个对机械工程充满热情的应届生,我有幸参加了杰瑞集团的机械工程师面试。面试过程既充满挑战,也不乏乐趣。以下是我面试的详细经历,包括面试流程、面试题目及参考答案。 #### 面试流程 1. **HR初面**:主要是对个人背景、教育经历和工作经验的初步了解。 2. **技术面**:由技术部门的主管进行,主要考察专业知识和项目经验。 3. **部门经理面**:更深入地了解我的技术能力和团队合作精神。 4. **总监终面**:最后一轮面试,总监会对候选人的整体素质进行评估。

m0_72216164的博客 2793

数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

BST树        即二叉搜索树:        1.所有非叶子结点至多拥有两个儿子(Left和Right);        2.所有结点存储一个关键字;        3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;        如:                B树的搜索,从根结点开始,如果查询的关键字与结点

Sup_Heaven的专栏 6万+

电商平台系统需求规格说明书(示例)

​​电商系统​​:指本文件所描述的集商品展示、销售、支付、物流跟踪、用户管理等功能于一体的综合性在线购物平台。​​API​​:应用程序编程接口(Application Programming Interface),用于实现系统各模块之间或与外部系统之间的数据交互和功能调用。

跟佟格湾一起学习计算机知识吧~ 1262

别再翻了,面试二叉树看这 11 个就够了~

写在前边 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不全面,一紧张,代码写的乱七八糟。如果遇到没有做过的算法题,思路也不知道从何寻找。面试吃了亏之后,我就慢慢的做出总结,开始分类的把数据结构所有的题型和解题思路每周刷题做出的系统性总结写在了 Github...

小鹿动画学编程 12万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

合并两个排序的链表、树的子结构、二叉树的镜像

2020/8/15合并两个排序的链表树的子结构二叉树的镜像 合并两个排序的链表 题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路:这是一个经常被各公司采用的面试题。首先分析合并两个链表的过程。我们分析从合并两个链表的头结点开始。链表1头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。在剩余的结点中,链表2的头结点的值小于链表1的头结点的值,因此链表2的头结点是剩余结点的头结点,把这个结点和之前已经合并好的链尾的尾结点链接起来。

qq_39568387的博客 263

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《剑指Offer名企面试官精讲经典型编程题》

《剑指Offer名企面试官精讲经典型编程题》源于何海涛(http://zhedahht.blog.163.com/)坚持更新和撰写博客。本书收集并整理了许多IT名企的经典面试题,如:微软、Google等。书中主要从:面试流程、基础知识、高质量的代码、常用解题思路、时间和空间优化、面试能力这几个方面讲解面试技巧。此书非常适合程序猿用于求职面试准备。书中供包含50个面试题:我收集并整理了这50个题目并

永不言弃01 1269

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

二叉树面试常考题【JAVA】

转:http://www.2cto.com/kf/201311/259183.html package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; impor

bin的主栏 709

剑指offer经典面试编程题python(P13~P18)

P13 调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 # -*- coding:utf-8 -*- class Solution: def reOrderArray(self, array): # write...

qq_34770787的博客 257

名企经典面试题

《剑指Offer》一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软、Google等知名IT企业的经典面试题。《剑指Offer》一书在此基础上选取了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点,难度适中,讲解清晰,非常适合程序猿用于准备求职面试。 

Keep Moving~ 1695

【转载】别再翻了,面试二叉树看这 11 个就够了

本文转载自博客:https://blog.youkuaiyun.com/qq_36903042/article/details/100798101 -----------------------------------------------------------------------------------------------------------------------------------...

woaitingting1985的博客 225

《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题

各位程序猿:         《剑指Offer》一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软、Google等知名IT企业的经典面试题。《剑指Offer》一书在此基础上选取了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点,难度适中,讲解清晰,

OSKernelLAB(gatieme) 2060

剑指offer 面试题18 树的子结构

剑指offer 面试题18 树的子结构 面试题: 输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 二叉树的定义如下: package algorithm.foroffer.top20;/** * Created by liyazhou on 2017/5/26. * 面试题 18:树的子结构 * * 题目: * 输入两棵二叉树 A 和 B,判断 B

LYZ 457

《剑指offer》算法题第五天

今日题目: 反转链表 合并两个排序的链表 树的子结构 二叉树的镜像 对称二叉树 今日重点是1反转链表,3树的子结构,以及5对称二叉树。 1. 反转链表 题目描述: 输入一个链表,反转链表后,输出链表的所有元素。思路: 这道题可以有递归和迭代两种实现方法,较为经典,其中迭代又有头插和非头插两种方法。 代码如下: 1 //递归实现 2 ...

diaoaizi7623的博客 135

【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题

各位程序猿:         《剑指Offer》一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软、Google等知名IT企业的经典面试题。《剑指Offer》一书在此基础上选取了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点,难度适中,讲解清晰,

安源 307

树的子结构(Java实现)

剑指offer面试题18 牛客网测试地址:https://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) public class Solution { // 判断root2是不是root1的子

zjkC050818的博客 996
上一篇: 面试经典(9)--求数组的逆序对
下一篇: LD_LIBRARY_PATH作用
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值