题目:

输入两颗二叉树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-树的子结构的更多相关文章

  1. 剑指Offer:面试题18——树的子结构(java实现)

    问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: public class TreeNode { int val = 0; TreeNode left = null; ...

  2. 剑指Offer - 九度1520 - 树的子结构

    剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...

  3. 剑指offer——面试题18.1:删除链表中重复的节点

    // 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...

  4. 剑指offer(17)树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树 ...

  5. 【剑指Offer】17、树的子结构

      题目描述:   输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   解题思路:   要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步, ...

  6. [刷题] 剑指offer 面试题18:删除链表节点

    要求 给定单向链表的头指针和一个节点指针,在O(1)时间内删除该节点 常规思路:从头节点a开始顺序遍历,发现p指向要删除的节点i,然后把p的m_pNext指向i的下一个节点j,时间复杂度O(n) O( ...

  7. 剑指offer——面试题18:删除链表的节点

    #include"List.h" void DeleteNode(ListNode** pHead,ListNode* pToBeDeleted) { if(*pHead==nul ...

  8. 【剑指offer】Q18:树的子结构

    类似于字符串的匹配,我们总是找到第一个匹配的字符,在继续比較以后的字符是否所有同样,假设匹配串的第一个字符与模式串的第一个不同样,我们就去查看匹配串的下一个字符是否与模式串的第一个同样,相应到这里,就 ...

  9. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  10. C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解

    剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...

随机推荐

  1. Chrome插件:浏览器后台与页面间通信

    content.js 与 background.js和popup.js 通信和 background.js与popup.js  这些通信都用 chrome.runtime.sendMessage 这个 ...

  2. PC端样式重置

    html{font-family:"Microsoft YaHei UI","Microsoft YaHei",sans-serif;-ms-text-size ...

  3. Kafka生产者----向kafka写入数据

    开发者可以使用kafka内置的客户端API开发kafka应用程序.除了内置的客户端之外,kafka还提供了二进制连接协议,也就是说,我们直接向kafka网络端口发送适当的字节序列,就可以实现从Kafk ...

  4. 笔试算法题(32):归并算法求逆序对 & 将数组元素转换为数组中剩下的其他元素的乘积

    出题:多人按照从低到高排成一个前后队列,如果前面的人比后面的高就认为是一个错误对: 例如:[176,178,180,170,171]中的错误对 为 <176,170>, <176,1 ...

  5. 我能考虑到的数组(老)方法就这些了(es5)

    代码注释都写的很清楚了 关键字:斐波那契数组.二维数组.多维数组(矩阵)... <!DOCTYPE html> <html lang="en"> <h ...

  6. 五段实用的js高级技巧

    技巧一之setTimeout. 应用案例:比如你想一个函数循环执行10次,怎么办?以前通常是先setInterval,然后clearInterval,技巧一就是克服这个问题 复制代码 代码如下: (f ...

  7. python第一章计算机基础

    第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 / 显示器 等组成,只有硬件但硬件之间无法进行交流和通信. 1.2 操作系统 操作系统用 ...

  8. xtu summer individual 5 D - Subsequence

    Subsequence Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID ...

  9. 全文检索(AB-1)-相关领域

    信息检索 认知科学 管理科学

  10. 跨域请求Ajax(POST)处理方法

    getXSSAjax(function() {  //跨域请求        that.ajaxDara(self);}, (bs_tita.webapi || "http://webapi ...