245.Subtree-子树(容易题)

2024-04-22 13:32
文章标签 245 容易 子树 subtree

本文主要是介绍245.Subtree-子树(容易题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

子树

  1. 题目

    有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。

    注意事项
    若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。

  2. 样例

    下面的例子中 T2 是 T1 的子树:
    这里写图片描述
    下面的例子中 T2 不是 T1 的子树:
    这里写图片描述

  3. 题解

    先递归找到T1中与T2头结点相同的节点,然后再同步进行递归遍历。

/*** Definition of TreeNode:* public class TreeNode {*     public int val;*     public TreeNode left, right;*     public TreeNode(int val) {*         this.val = val;*         this.left = this.right = null;*     }* }*/
public class Solution {/*** @param T1, T2: The roots of binary tree.* @return: True if T2 is a subtree of T1, or false.*/public boolean isSubtree(TreeNode T1, TreeNode T2) {if (T2 == null){return true;}if (T1 == null){return false;}if (isEquals(T1,T2)){return true;}if (isSubtree(T1.left,T2) || isSubtree(T1.right,T2)){return true;}return false;}private boolean isEquals(TreeNode T1, TreeNode T2){if (T1 == null || T2 == null) {return T1 == T2;}if (T1.val != T2.val) {return false;}return isEquals(T1.left, T2.left) && isEquals(T1.right, T2.right);}
}

Last Update 2016.9.13

这篇关于245.Subtree-子树(容易题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【HDU】5574 Colorful Tree【子树染色,询问子树颜色数——线段树+bit+lca+set】

题目链接:【HDU】5574 Colorful Tree 题目大意:对一个子树染色,询问一个子树的颜色数。 题目分析: set set维护每种颜色所在的 dfs dfs序区间,修改均摊 nlogn nlogn。 #include <bits/stdc++.h>using namespace std ;typedef long long LL ;typedef pair < int , i

git如何设置嵌套仓库(设置子树或子模块),并解决直接将一个仓库拖拽到另一个仓库中导致的问题

git 将一个仓库拷贝到另一个仓库的文件夹下。默认git并不会处理,上传上去之后,只会创建一个文件夹,但是这个文件夹点不开。 在 git add . 的时候,会报出警告: 警告:正在添加嵌入式 git 仓库:client提示: You've added another git repository inside your current repository.提示: Clones of

初学java——关于数组容易忽视的地方总结

1:静态初始化:有程序员显示指定每个数组的初始化,由系统决定数组的长度。      动态初始化:程序员只指定数组长度,由系统为数组元素分配初始值。 2:java数组变量是一种引用类型的变量,引用的是堆内存中数组对象,而不是栈内存中的数组变量。例如数组int[] A={1,2,3};int[] B={4,5,6};当执行下面语句时:A=B;则int[] A={4,5,6};引用数组A时,变量为数

独立站运营中容易陷入的误区

近年来,越来越多的跨境电商卖家选择独立站作为他们品牌的出海模式,但有些卖家花了很多时间精力在建站和投放广告上,却依旧无法获得一个好的效果,究其原因,可能是你在运营独立站的时候搞错了重点,本文整理了一些在独立站运营中容易陷入的误区,看看你是否踩坑了? 1、把过多精力放在建站上 建站是独立站运营的第一步,但绝不是最重要的,许多新手会把大量时间和精力放在建站上,这其实没有必要,市面上有许多成熟的

算法---------寻找重复的子树(Java版本)

题目描述: 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。示例 1:1/ \2 3/ / \4 2 4/4下面是两个重复的子树:2/4和4因此,你需要以列表的形式返回上述重复子树的根结点。 解决方法: /*** Definition for a binary tree n

深入分析网络编程中容易踩的坑

目录 1.TCP没考虑粘包分包 2.UDP没考虑丢包 3.长连接没考虑应用层心跳 4.大小端字节序问题 5.多线程发送乱序问题 6.大数据没考虑分片和流量控制 7.外网没考虑加密通信 8.客户端没考虑断线重连 1.TCP没考虑粘包分包   TCP是面向连接的可靠协议,TCP是流式协议,创建TCP套接字的类型为SOCK_STREAM int sockfd = socket(

2166. 子树的大小及深度

代码 #include<bits/stdc++.h>using namespace std;vector<int> a[110];int d[110],s[110];int dfs(int x,int y){int i;s[x]=1;d[x]=d[y]+1;for(i=0;i<a[x].size();i++)if(a[x][i]!=y)s[x]=s[x]+dfs(a[x][i

数据结构-非线性结构-树形结构:有序树 ->二叉树 -> 平衡二叉树(任何节点的左右子树的高度差不大于1)-> 完全二叉树(除最底层外的其他层都被填满,且最底层左到右填入) -> 堆(优先队列)

完全二叉树:即除了最底层,其他层的节点都被元素填满,且最底层左到右填入。 完全二叉树属于平衡二叉树。 堆是一种完全二叉树,且满足以下条件: 最大堆:每个节点都比其子树所有节点大的完全二叉树;最小堆:每个节点都比其子树所有节点小的完全二叉树; 我们对堆中的结点按层进行编号,可以将堆逻辑结构映射到数组中 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i

初学者深度学习搭建网络容易出错的‘大因素’

1.网络输出与监督信号的尺寸应该匹配 如果你的输出是128*128*10的结果,那么你的监督信号也应该是128*128*10 如果你的监督信号是128*128*1,但是最后一个维度是整数,比如[1,10,2,3,1,1,1...]但是你的输出是128*128*10,那你可以考虑使用sparse 损失函数。categorical_sparse_crossentropy   2.监督信号应注意

让你很容易被黑客盯上的九个行为

我们都不想沦为黑客的受害者,但有时我们不知不觉中做出的决定却又增加了沦为受害者的可能性。有时候,一个小小的错误就可能为黑客打开便利之门,所以知道应该避免什么显得很重要。 以下是让你更容易受到黑客攻击的九个错误。        1. 使用公共Wi-Fi网络 当我们外出在商店、餐馆、咖啡厅和酒店时,有两种方式可以连接到互联网:使用我们的移动数据流量或连接到公共Wi-Fi网络。我们常常不想耗用自己