剑指offer——树的子结构(26题)

2024-04-25 19:32
文章标签 offer 26 子结构

本文主要是介绍剑指offer——树的子结构(26题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:输入两棵二叉树A和B,判断B是不是A的子结构。

老生常谈,有关二叉树的题型解答,离不开遍历算法,此题又可以看成是用中序遍历改进法来解答。

其思路如下:

i、先从A树的根节点开始,一一与B树的节点对应匹配比较;

ii、如i不成功,则遍历根的左儿子,重复i过程;

iii、如ii不成功,则遍历根的右儿子,重复i过程。

代码实现如下:

#include<iostream>
#include<cmath>using namespace std;struct TreeNode {double val;TreeNode* left, *right;TreeNode(double x):val(x),left(nullptr),right(nullptr){}
};bool equal(TreeNode* root1, TreeNode* root2) {if (fabs(root1->val - root2->val) < 0.000001)return true;return false;
}bool doesTree1HaveTree2(TreeNode* root1, TreeNode* root2) {if (root2 == nullptr)//能到达B树的叶子节点的子节点,则返回truereturn true;if (root1 == nullptr)//能到达A树的叶子节点的子节点,说明还不能匹配成功,返回falsereturn false;if (!equal(root1, root2))//两节点值不相等,也返回falsereturn false;return doesTree1HaveTree2(root1->left, root2->left) && doesTree1HaveTree2(root1->right, root2->right);
}bool hasSubtree(TreeNode* root1, TreeNode* root2) {if (!root1 || !root2)return false;int result = false;if (equal(root1, root2))//从根节点判断,是否与root2匹配result = doesTree1HaveTree2(root1, root2);if (!result)//在根节点开始,与root2匹配不成功下,递归判断左儿子与root2是否匹配result = hasSubtree(root1->left, root2);if (!result)//在根节点且根的左子树,与root2匹配不成功下,递归判断右儿子与root2是否匹配result = hasSubtree(root1->right, root2);return result;
}

 

这篇关于剑指offer——树的子结构(26题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935584

相关文章

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

20190315 把整理和培养自己当作一生的事业,而不是局限在找工作拿offer。

把整理和培养自己当作一生的事业,而不是局限在找工作拿offer,做有本事的人。 来东南读研半年了,明显感觉自己掌握的不过是书本知识级别的中上水平,垃圾收集器这些的只知道背面经,靠脑子硬记,缺乏整理和系统,一头浆糊。 现在一边做实训这个烂项目,一边刷面经,一边刷剑指offer,想投些大公司的实习,又觉得还没准备好,看着各 种面经,都能说个大概,但明显感觉到自己知识的不体系和不深入,**做的项目

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

JD 1520:树的子结构

OJ题目:click here~~ 剑指offer 面试题18 AC_CODE const int maxn = 1008 ;const int maxm = 1008 ;int m , n ;struct Node{int x ;int l ;int r ;Node():l(-1),r(-1){}}A[maxn] , B[maxm];vector<int> g ;void F

【简历】25届南京某一本JAVA简历:简历通过率还好,但是拿不到OFFER

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 今天看一份25届南京某一本大学的Java简历。 这个简历呢,学校是一本。我们说上来先要定校招层次,这个层次就按照中厂来讲。因为现在很多的双非一本目标都是在中厂。 这个同学有个实习经历,一本有八成的同学主项目都是重复的。HR他只能看到项目重不重复,要点对不对他不知道,就从这个角度来看,这位同学

26 页高清大数据开发代码速查表,提升效率必备!【可下载】

各大互联网公司高价抢夺数据人才,为谋求长期发展、获得高薪,很多人转行到了大数据领域。这条路人才虽缺,但要成为优秀大数据工程师并不轻松:别的不说,光学习新技术,巩固旧知识,就需要耗费大量时间精力,实属不易。 为帮助大家提高学习效率,方便日后查找和使用,这里整理了一份大数据开发代码速查表资料,内容包括 Spark、Hadoop 及 Hive 等大数据开发主要知识点。 由于篇幅原因,下面只展示了速查表

26 页高清分布式集群代码速查表,提升效率必备!【可下载】

各大互联网公司高价抢夺海量数据处理、分布式系统开发人才,为谋求长期发展、获得高薪,很多人转行到了大数据、分布式、集群运维领域。这条路人才虽缺,但并不轻松:别的不说,光学习新技术,巩固旧知识,就需要耗费大量时间精力,实属不易。 为帮助大家提高学习和工作效率,方便日后查找和使用其中涉及的知识点,这里整理了一份分布式/集群开发、运维的代码速查表资料,内容包括 Spark、Hadoop 及 Hive 等

所以说读者们才是最优秀的 | 某读者喜提offer(+85%)后的分享

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 这是小编的一个读者喜提offer后在群里做的分享,文中隐藏了读者的个人隐私信息,小编这里把他的面经分享出来供大家学习。  群友们看到后都纷纷表示【我酸了,现在我就是个柠檬精系列】。 小编现在也是个柠檬精????????????????????????????????。 小编现在是群里最菜的了。     关于如何学习/准备面试的总结

剑指offer——替换字符

/*** 剑指offer* 替换字符*/import java.util.Scanner;public class Solution {public String replaceSpace(StringBuffer str) {String s=str.toString();StringBuilder st=new StringBuilder(); for(int i=0;i<s.leng

剑指offer——第一次只出现一次的字符

/*** */package interview35;/*** 第一次只出现一次的字符* 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置*@author: Administrator*@date: 2017-1-9 下午07:34:07*/import java.util.Scanner;public class Solutio