剑指offer面试题18-树的子结构
题目:
输入两颗二叉树A和B,推断B是不是A的子结构。
树的结构例如以下:
package com.aii.algorithm; public class TreeNode {
int value;
TreeNode left;
TreeNode right; public TreeNode(int value) {
this.value = value;
} }
全在凝视上:
package com.aii.algorithm; public class HasSubTree { // 分两步:
// 1.遍历
// 2.对于遍历到的节点与sub的根节点同样的。再细致比較
public boolean check(TreeNode root, TreeNode sub) {
// 当前空,则返回false,表示遍历完了,都没找到。 if (root == null) {
return false;
}
TreeNode current = root;
// 先序遍历,先推断自己再说
if (current == sub) {
// 假设是同样的,那就比較,
// 假设比較成功,那就返回true,
// 假设比較失败,也不能返回false,由于有可能这里不匹配剩下的有匹配的
// 全部是用if(boolean)return true而不用return boolean.
if (checkThis(current, sub)) {
return true;
}
} // 先序遍历到了左边。由于root为空的时候,则返回false
// 而左没了还有右,所以不能直接check(root.left,sub)
// 假设左没了,就找右。假设左有,就找找看
if (root.left != null) {
if (check(root.left, sub)) {
return true;
}
}
// 最后到了右。无论怎么样
// 既然都到这了,说明中,左都没找到
// 所以能够直接return check(root.right,sub);
return check(root.right, sub);
} // 此方法用来推断当前的current节点是否包括sub节点,并且是一一相应的
// 即current=sub;
// current.left=sub.left;
// current.right=sub.right;
private boolean checkThis(TreeNode current, TreeNode sub) {
// sub为null。说明遍历完了。没找到不符合的,返回true
if (sub == null) {
return true;
}
// 这里也是採用递归遍历,先序遍历的方法
// 万一遇到一个不同的。返回false
if (sub != current) {
return false;
}
// 左边,与前面不同的是,先推断左边是不是有不同的,有就肯定是false。
// 没有也不代表是肯定同样。还得看右边
if (sub.left != null) {
if (!checkThis(current.left, sub.left)) {
return false;
}
}
// 最后右边
return checkThis(current.right, sub.right);
}
}
剑指offer面试题18-树的子结构的更多相关文章
- 剑指Offer:面试题18——树的子结构(java实现)
问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: public class TreeNode { int val = 0; TreeNode left = null; ...
- 剑指Offer - 九度1520 - 树的子结构
剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...
- 剑指offer——面试题18.1:删除链表中重复的节点
// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...
- 剑指offer(17)树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树 ...
- 【剑指Offer】17、树的子结构
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路: 要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步, ...
- [刷题] 剑指offer 面试题18:删除链表节点
要求 给定单向链表的头指针和一个节点指针,在O(1)时间内删除该节点 常规思路:从头节点a开始顺序遍历,发现p指向要删除的节点i,然后把p的m_pNext指向i的下一个节点j,时间复杂度O(n) O( ...
- 剑指offer——面试题18:删除链表的节点
#include"List.h" void DeleteNode(ListNode** pHead,ListNode* pToBeDeleted) { if(*pHead==nul ...
- 【剑指offer】Q18:树的子结构
类似于字符串的匹配,我们总是找到第一个匹配的字符,在继续比較以后的字符是否所有同样,假设匹配串的第一个字符与模式串的第一个不同样,我们就去查看匹配串的下一个字符是否与模式串的第一个同样,相应到这里,就 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
随机推荐
- python 导入beautifulsoup报错
导入Beautifulsoup 报错 AttributeError: 'module' object has no attribute '_base' 解决方法: pip install --up ...
- python 获取路径
获取目录路径和文件路径 import osfor root, dirs, files in os.walk(".", topdown=False): # ‘.’为获取脚本所在路径下 ...
- IOS沙盒(sandbox)机制和文件操作
IOS学习之IOS沙盒(sandbox)机制和文件操作 作者:totogo2010 ,发布于2012-9-21,来源:CSDN 目录: IOS学习之IOS沙盒(sandbox)机制和文件操作( ...
- nodejs运行机制
有一天老大忽然问起我这个问题,nodejs运行机制 是怎样的?因自己对nodejs也不是很熟悉,就上网查了一下,得出结果如下: 1.简介 Node.js是一个事件驱动I/O服务端JavaScript环 ...
- CSU1007: 矩形着色
Description Danni想为屏幕上的一个矩形着色,但是她想到了一个问题.当点击鼠标以后电脑是如何判断填充的区域呢? 现在给你一个平面直角坐标系,其中有一个矩形和一个点,矩形的四条边均是平行于 ...
- IDEA下Eclipse快捷键
- ruby cloud9部署到heroku
Cloud9网址:https://c9.io/ 使用github账号登陆,如果没有,现在github(https://github.com/)上注册一个用户,在进行登陆.
- PHP:车牌照合法性
文章来源:http://www.cnblogs.com/hello-tl/p/7592362.html <?php /** * [verifyCarCard description] 效验车牌号 ...
- Python之游戏开发-飞机大战
Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...
- SQLSERVER DBCC命令大全
DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保 ...