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

考察点

树的遍历,递归思想

知识点

题目

分析
本题目要求判断树B是否是另外一颗树A的子结构,按照正常的递归思维就可以解决这道题目。首先要求这俩颗树的根结点必须一样,所以如果树A的根结点和树B的根结点不一样了则需要递归树A去找到和树B根结点一样的子树,找到以后再去递归判断这俩个树的左子树和右子树是否完全一致

public class Eighteen {public static void main(String args[]) {BinaryTree binaryTree = new BinaryTree();binaryTree.insertTree(8);binaryTree.insertTree(7);binaryTree.insertTree(9);binaryTree.insertTree(5);binaryTree.insertTree(6);binaryTree.insertTree(2);BinaryTree binaryTreeSub = new BinaryTree();binaryTreeSub.insertTree(7);binaryTreeSub.insertTree(5);binaryTreeSub.insertTree(6);System.out.println(isSubStruct(binaryTree.getRoot(),binaryTreeSub.getRoot()));BinaryTree binaryTreeSubOne = new BinaryTree();binaryTreeSubOne.insertTree(7);binaryTreeSubOne.insertTree(5);binaryTreeSubOne.insertTree(6);binaryTreeSubOne.insertTree(11);System.out.println(isSubStruct(binaryTree.getRoot(),binaryTreeSubOne.getRoot()));BinaryTree binaryTreeSubTwo = new BinaryTree();System.out.println(isSubStruct(binaryTree.getRoot(),binaryTreeSubTwo.getRoot()));}public static boolean isSubStruct(Node treeOne,Node treeTwo) {boolean result = false;if (treeOne != null && treeTwo != null) {if (treeOne.val == treeTwo.val) {result = isSubDeepResult(treeOne,treeTwo);}if (!result) {result = isSubStruct(treeOne.leftChild,treeTwo);}if (!result) {result = isSubStruct(treeOne.rightChild,treeTwo);}}return result;}public static boolean isSubDeepResult(Node treeOne,Node treeTwo) {//如果树B为空了代表树B已经遍历完了,说明结构一样if (treeTwo == null) {return true;}//到这一步表面,树B还没有遍历完树A确遍历完了说明俩个树结构已经不一样了if (treeOne == null) {return false;}if (treeOne.val != treeTwo.val) {return false;}return isSubDeepResult(treeOne.leftChild,treeTwo.leftChild) && isSubDeepResult(treeOne.rightChild,treeTwo.rightChild);}
}
public class Node{int val;Node leftChild;Node rightChild;public Node(int data) {this.val = data;this.leftChild = null;this.rightChild = null;}
}
public class BinaryTree {Node root;public BinaryTree() {this.root = null;}public void insertTree(int val) {if (this.root == null) {Node root = new Node(val);this.root = root;} else {insertChildTree(this.root,val);}}public void insertChildTree(Node node,int val) {if (node != null && val <= node.val) {if (node.leftChild == null) {node.leftChild = new Node(val);} else {insertChildTree(node.leftChild,val);}}if (node != null && val > node.val) {if (node.rightChild == null) {node.rightChild = new Node(val);} else {insertChildTree(node.rightChild,val);}}}public Node getRoot() {return this.root;}public void prePrint(Node node) {if (node == null) {return;}System.out.print(node.val + " ");prePrint(node.leftChild);prePrint(node.rightChild);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离散数学 第八单元 布尔代数

目录 1. 布尔函数 2. duality 二元性 3. 表示布尔函数的布尔表达式 sum-of-products expansions 4. Functional Completeness 5. Logic Gates 逻辑门​​​​​​​ 4. 最小化 K-map卡诺图 Quine-McCluskey法 1. 布尔函数 嗯也就是我要知道布尔代数是啥形式&#xff…

【Spring】 AOP面向切面编程

文章目录 AOP是什么&#xff1f;一、AOP术语名词介绍二、Spring AOP框架介绍和关系梳理三、Spring AOP基于注解方式实现和细节3.1 Spring AOP底层技术组成3.2 初步实现3.3 获取通知细节信息3.4 切点表达式语法3.5 重用&#xff08;提取&#xff09;切点表达式3.6 环绕通知3.7 切…

ElasticSearch-DataGrip

一、解决datagrip连接ES7.4.2版本错误问题&#xff1a; 1.下载驱动 JDBC Client 7.4.2 | Elastic Past Releases of Elastic Stack Software | Elastic 2.下载后解决签证问题 current license is non-compliant for [jdbc]. 出现这样的报错信息的时候 使用postman发送一个Po…

【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人

什么是RAG LLM会产生误导性的 “幻觉”&#xff0c;依赖的信息可能过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented G…

fastApi笔记09-响应模型

响应模型 可以在任意路径操作&#xff08;get,post等&#xff09;中使用response_model来声明用于返回响应模型 from typing import Anyfrom fastapi import FastAPI from pydantic import BaseModel, EmailStr app FastAPI()class UserIn(BaseModel):username: strpassword…

家庭装修的施工流程与工艺,新房装修的实用技术与方法

一、教程描述 对于第一次装修新房的朋友来说&#xff0c;做好装修的准备工作是非常必要的&#xff0c;起码应该了解新房装修的基本施工流程。家庭装修的施工顺序&#xff1a;1&#xff0c;购买材料开工进场&#xff1b;2&#xff0c;水电&#xff1a;开槽布线&#xff0c;铺设…

Samba文件夹有的能访问,有的不能解决办法(samba无法访问、samba文件夹打不开)需要把selinux设置为Permissive宽容模式

文章目录 如果有的目录能访问有的不能访问大概率是selinux设置了Enforcing强制模式需要把selinux设置为Permissive宽容模式或者Disabled禁用参考文章 如果有的目录能访问 有的不能访问 大概率是selinux设置了Enforcing强制模式 需要把selinux设置为Permissive宽容模式或者Di…

TYPE-C接口桌面显示器:视频与充电的双重革新

在现代科技的浪潮中&#xff0c;TYPE-C接口桌面显示器崭露头角&#xff0c;它不仅仅是一台显示器&#xff0c;更是充电与视频传输的完美融合。这种新型的显示器&#xff0c;凭借其TYPE-C接口&#xff0c;实现了从DC电源到PD协议充电的华丽转身&#xff0c;为众多设备如笔记本电…

Stable Diffusion 绘画入门教程(webui)-ControlNet(Tile/Blur)

上篇文章介绍了y语义分割Seg&#xff0c;这篇文章介绍下Tile/Blur&#xff08;增加/减少细节&#xff09; Tile用于增加图片细节&#xff0c;一般用于高清修复&#xff0c;Blur用于减少图片细节&#xff08;图片模糊&#xff09;&#xff0c;如下图&#xff0c;用Tile做修复&a…

【Vue渗透】Vue Devtools 浏览器插件

下载地址 Vue Devtools 浏览器插件 Vue站点渗透思路 【Vue渗透】Vue站点渗透思路 简介 Vue Devtools 是 Vue 官方发布的调试浏览器插件&#xff0c;可以安装在 Chrome 和 Firefox 等浏览器上&#xff0c;直接内嵌在开发者工具中&#xff0c;使用体验流畅。Vue Devtools 由…

HEVC视频编解码标准学习笔记-1

视频编解码标准H.265/HEVC&#xff08;High Efficiency Video Coding&#xff09;通过将视频数据编码为更高效格式&#xff0c;大幅改善了视频流的压缩效率。这里主要介绍Tile、Slice和CTU的定义&#xff0c;以及介绍这些技术组件之间的相互关系。 CTU&#xff08;编码树单元&…

QPixmap入门学习

QPixmap是Qt中用于处理图片的类&#xff0c;可以加载、显示和操作图片。以下是几个常见的QPixmap的用法示例&#xff1a; 加载图片&#xff1a; from PyQt5.QtGui import QPixmap# 加载图片 pixmap QPixmap("image.jpg")显示图片&#xff1a; from PyQt5.QtWidgets …

Oracle19c 静默安装(OpenEuler)

一、概述 我一般都是用runInstaller和dbca的图形界面安装Oracle&#xff0c;但是这次安装&#xff0c;受到网络限制&#xff0c;不能用弹出窗口&#xff0c;只能用静默方式&#xff0c;还是使用这些可执行程序&#xff0c;不过要加一个 -silent 选项&#xff0c;参考了网上的文…

【蓝牙协议栈】btsnoop 概念介绍

1. btsnoop 概念介绍 btsnoop 用于记录蓝牙协议栈跟芯片交互的数据。在分析蓝牙问题的时候有很大的用途&#xff0c;能够快速定位问题所在&#xff0c;一般协议栈都有整合这个或者类似功能&#xff0c;否则我不认为这个协议栈是一个合格的协议栈&#xff0c;在 android 手机中…

AI时代显卡如何选择,B100、H200、L40S、A100、H100、V100 含架构技术和性能对比

AI时代显卡如何选择&#xff0c;B100、H200、L40S、A100、H100、V100 含架构技术和性能对比。 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择&#xff0c;含架构技术和性能对比带你解决疑惑。 近期&#xff0c;AIGC领域呈现出一片繁荣景象&a…

可变参数、Collections类

一、可变参数 定义&#xff1a;是一种特殊的形参&#xff0c;定义在方法、构造器的形参列表里 格式&#xff1a;数据类型...参数名称 特点&#xff1a;可以不传数据&#xff0c;也可以传一个或者多个数据给它&#xff0c;也可以传一个数组 好处&#xff1a;可以灵活接收数据…

opencascade12解析

1.main.cpp #include "DisplayScene.h" #include "Viewer.h"// OpenCascade includes #include <BinXCAFDrivers.hxx> // 包含了用于处理 XCAF 数据的头文件 #include <STEPCAFControl_Reader.hxx> // 包含了用于读取 S…

探索无限维度的奥秘:Hilbert空间

当我们提到空间&#xff0c;你可能会立即想到周遭的环境——三维世界&#xff0c;其中事物可以向上或向下、左或右、前或后移动。然而&#xff0c;在数学和物理学的世界里&#xff0c;有一种抽象的空间概念&#xff0c;它不仅覆盖了我们的三维空间&#xff0c;还包括了更复杂的…

C++笔记:二叉搜索树(Binary Search Tree)

文章目录 二叉搜索树的概念二叉搜索树操作1. 框架搭建2. 遍历3. 查找迭代实现递归实现 4. 插入迭代实现递归实现 5. 删除迭代实现递归实现 6. 析构与销毁7. 拷贝构造与赋值重载 二叉搜索树的应用二叉搜索树的性能分析二叉搜索树模拟实现源码 二叉搜索树的概念 二叉搜索树又称二…

车载电子电器架构 —— 局部网络管理概述

车载电子电器架构 —— 局部网络管理概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…