博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指 Offer》——17、树的子结构
阅读量:2343 次
发布时间:2019-05-10

本文共 1810 字,大约阅读时间需要 6 分钟。

1. 本题知识点

2. 题目描述

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

例如:

二叉树 A:    	    8    	   /  \    	  6   10    	 / \  / \    	5  7 9  11二叉树 B:    	  6      	 / \     	5  7

3. 解题思路

可以分两步解决这个问题:

  1. 遍历二叉树 A,在二叉树 A 中找到与二叉树 B 的根结点值相等的结点
  2. 判断二叉树 B 是不是该结点的子树

4. 代码

public class TreeNode {
int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {
this.val = val; }}
public class Solution {
/** * 输入两棵二叉树 A,B,判断 B 是不是 A 的子结构 * @param root1 二叉树 A * @param root2 二叉树 B * @return */ public boolean HasSubtree(TreeNode root1, TreeNode root2) {
boolean result = false; // 当两棵树都不为空时,才进行比较 if (root1 != null && root2 != null) {
// 如果找到了与二叉树 B 的根结点值相等的结点 if (root1.val == root2.val) {
// 判断二叉树 B 是不是该结点的子树 result = IsSubtree(root1, root2); } // 如果没找到,遍历二叉树 A 的左结点 if (!result) {
result = HasSubtree(root1.left, root2); } // 如果还没找到,遍历二叉树 A 的右结点 if (!result) {
result = HasSubtree(root1.right, root2); } } return result; } /** * 判断二叉树 B 是不是该结点的子树 * @param root1 该结点 * @param root2 二叉树 B * @return */ public boolean IsSubtree(TreeNode root1, TreeNode root2) {
// 二叉树 B 遍历完了,则说明是该结点的子树,返回 true if (root2 == null) {
return true; } // 二叉树 B 没遍历完,该结点却遍历完了,返回 false if (root1 == null) {
return false; } // 两棵树结点值不相同,返回 false if (root1.val != root2.val) {
return false; } // 继续判断两棵树子结点是否匹配 return IsSubtree(root1.left, root2.left) && IsSubtree(root1.right, root2.right); }}

转载地址:http://cyjvb.baihongyu.com/

你可能感兴趣的文章
Ubuntu 安装百度云客户端
查看>>
每天一个linux命令:locate
查看>>
Linux 环境下载百度云资源,Firefox插件(百度网盘助手)
查看>>
ubuntu Firefox/chrome adobe flash 插件安装
查看>>
OpenCV图像变换(仿射变换与透视变换)
查看>>
仿射变换与透视变换
查看>>
Ubuntu 16.04 上安装 CUDA 9.0 详细教程
查看>>
Verify You Have a CUDA-Capable GPU
查看>>
ROS中OpenCV的使用——人脸检测
查看>>
ROS学习笔记(1):在ROS中使用OpenCV进行简单的图象处理--原理篇
查看>>
ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
查看>>
C语言中声明和定义详解
查看>>
ros代码中添加使用opencv库,cv::Mat和ros image之间的相互转换
查看>>
ROS 不能再详细的安装教程
查看>>
在ros底下安装opencv
查看>>
PHP页面纯静态化与伪静态化
查看>>
分享网页到微信朋友圈,显示缩略图的方法
查看>>
PHP参数类型限制
查看>>
IOS博客项目搭建-12-刷新数据-显示最新的微博数提示
查看>>
Laravel5 Markdown 编辑器使用教程
查看>>