leetcode572
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * public int val;
- * public TreeNode left;
- * public TreeNode right;
- * public TreeNode(int x) { val = x; }
- * }
- */
- public class Solution {
- private string generatepreorderString(TreeNode s)
- {
- StringBuilder sb = new StringBuilder();
- Stack<TreeNode> stacktree = new Stack<TreeNode>();
- stacktree.Push(s);
- while (stacktree.Count > )
- {
- TreeNode popelem = stacktree.Pop();
- if (popelem == null)
- {
- sb.Append(",#"); // Appending # inorder to handle same values but not subtree cases
- }
- else
- {
- sb.Append("," + popelem.val);
- }
- if (popelem != null)
- {
- stacktree.Push(popelem.right);
- stacktree.Push(popelem.left);
- }
- }
- return sb.ToString();
- }
- public bool IsSubtree(TreeNode s, TreeNode t)
- {
- string spreorder = generatepreorderString(s);
- string tpreorder = generatepreorderString(t);
- return spreorder.Contains(tpreorder);
- }
- }
https://leetcode.com/problems/subtree-of-another-tree/#/description
补充一个使用python的实现,思路就是使用二叉树的先序遍历,将节点和空节点存储到字符串中,然后比较t是否是s的字串。
- class Solution:
- s_pre = ""
- t_pre = ""
- def preOrder(self,root):
- if root!=None:
- self.s_pre += '<'+ str(root.val) + '>'
- self.preOrder(root.left)
- self.preOrder(root.right)
- else:
- self.s_pre += '<x>'
- def preOrder2(self,root):
- if root!=None:
- self.t_pre += '<' + str(root.val) + '>'
- self.preOrder2(root.left)
- self.preOrder2(root.right)
- else:
- self.t_pre += '<x>'
- def isSubtree(self, s: 'TreeNode', t: 'TreeNode') -> 'bool':
- self.preOrder(s)
- self.preOrder2(t)
- return self.t_pre in self.s_pre
执行效率还是比较高的。
再补充一个双层递归的实现,我是不喜欢这种方式的,而且执行效率也低。
- class Solution:
- def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
- if s == None:
- return False
- return self.isSubTreeWithRoot(s,t) or self.isSubtree(s.left,t) or self.isSubtree(s.right,t)
- def isSubTreeWithRoot(self,s,t):
- if s == None and t == None:
- return True
- if s == None or t == None:
- return False
- if s.val != t.val:
- return False
- return self.isSubTreeWithRoot(s.left,t.left) and self.isSubTreeWithRoot(s.right,t.right)
leetcode572的更多相关文章
- 第26题:LeetCode572:Subtree of Another Tree另一个树的子树
题目描述 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 1: ...
- [Swift]LeetCode572. 另一个树的子树 | Subtree of Another Tree
Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and no ...
- Leetcode--572. Subtree of Another Tree(easy)
Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and no ...
- Leetcode572.Subtree of Another Tree另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 1: 给定的树 ...
- LeetCode572. 另一个树的子树
题目 本题目一开始想要通过二叉树遍历KMP匹配,但看来实现比较复杂 不如直接暴力匹配,本题和LeetCode100.相同的树有共通之处 1 class Solution { 2 public: 3 b ...
- leetcode_二叉树篇_python
主要是深度遍历和层序遍历的递归和迭代写法. 另外注意:因为求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中). 所有题目首先考虑root否是空.有的 ...
随机推荐
- 21天学通C++_Day5
昨天停更了一天,真是羞羞啊,不过还是干了很多有意义的事的! 首先,昨天下午的时候,去参加了学校的春招!第一次参加招聘会,怕自己答不上面试官的问题,很是紧张! 和同学约的一点,结果到了发现还没开始,只能 ...
- JAVA类的加载、连接与初始化
JAVA类的加载.连接与初始化 类的声明周期总共分为5个步骤1.加载2.连接3.初始化4.使用5.卸载 当java程序需要某个类的时候,java虚拟机会确保这个类已经被加载.连接和初始化,而连接这个类 ...
- Oracle数据库安装图文操作步骤1
Oracle数据库安装图文操作步骤 一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官 ...
- db_recovery_file_dest_size 修改大一点及删除归档日志 |转|
今天给客户测 试问题,让客户把数据发过来了.解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本 ...
- VirtulBox安装虚拟机(鼠标点击时)0x00000000指令引用的0x00000000内存该内存不能为written错误解决方案
这个错误并不是所有人都会用到,我用的是WIN7系统,公司的电脑.查找了很多原因后,发现的确是由于系统主题被破解过的原因. 手工恢复风险太高.通过下面的工具就可以直接恢复.UniversalThemeP ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- Sublime + python2.7 + opencv (轻量级开发环境)
工具: 1. Python2.7,安装完成 2. 相应版本的cv2.pyd,放入到…\Python27\Lib\site-packages\下 3. 下载Sublime Text 3,破解它,网上搜个 ...
- 生产者-消费者问题:介绍POSIX线程的互斥量和条件变量的使用
全局初始化互斥量和条件变量(不全局也行,但至少要对线程启动函数可见,这样才能使用.) static pthread_cont_t cond = PTHREAD_COND_INITIALIZER; st ...
- 如何搭建struts2框架
一.首先,下载5个Struts2核心jar包: commons-logging-1.1.1.jar freemarker-2.3.15.jar ognl-2.7.3.jar struts2-core- ...
- 运维平台cmdb开发-day3
后台管理 1. 访问过程 我们在前面2天得到了各个客户端的资产数据信息,我们将各个这个数据打包发送到api,这个api其实就是django的url传参,之后按照数据的格式对比数据库增删改 2. 后台页 ...