剑指offer:树的子结构
来源:互联网 发布:非诚勿扰杨宇航淘宝店 编辑:程序博客网 时间:2024/06/02 02:07
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
方法1:递归
【运行时间:16ms 占用内存:8140k】
public class Solution { public boolean isSubtree(TreeNode root1,TreeNode root2){ if(root2==null) return true; if(root1==null) return false; if(root1.val==root2.val){ return isSubtree(root1.left,root2.left)&&isSubtree(root1.right,root2.right); }else return false; } public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null||root2==null) return false; return isSubtree(root1,root2)||HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2); }}
递归版本2:来自牛客网牛油回答,这个递归更好理解点。
public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null||root2==null)return false; return isSubtree(root1,root2)||HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2); } public boolean isSubtree(TreeNode root1,TreeNode root2){ if(root2==null)return true; if(root1==null)return false; return (root1.val==root2.val)&&isSubtree(root1.left,root2.left)&&isSubtree(root1.right,root2.right); }}
方法2:用两个ArrayList判断
思路:用将root1中节点数值放入list1中,节点2中数值放入list2中,依次遍历list2中数值,如果发现list2中数值list1中没有。则返回false,否则返回true.
【运行时间:15ms 占用内存:8544k】
import java.util.*;public class Solution { ArrayList<Integer> list1 = new ArrayList<Integer>();ArrayList<Integer> list2 = new ArrayList<Integer>(); public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null||root2==null)return false; getTree(root1,list1); getTree(root2,list2); for(int i:list2){ if(!list1.contains(i)) return false; } return true; } public void getTree(TreeNode root,ArrayList<Integer> list){ if(root==null)return; getTree(root.left,list); list.add(root.val); getTree(root.right,list); }}
阅读全文
1 0
- 剑指offer:判断树的子结构
- 【剑指offer】树的子结构
- 【剑指offer】Q18:树的子结构
- 剑指offer--17树的子结构
- 剑指offer--树的子结构
- 剑指Offer之 - 树的子结构
- 剑指offer 18 - 树的子结构
- 剑指Offer-树的子结构
- 剑指offer之树的子结构
- 《剑指offer》树的子结构
- 剑指offer—树的子结构
- 剑指Offer-18-树的子结构
- 剑指offer:树的子结构
- 【剑指offer】之树的子结构
- 剑指offer 17 树的子结构
- 剑指offer 树的子结构
- 剑指offer:树的子结构
- [剑指offer]树的子结构
- Android高效加载大图,多图解决方案,有效避免OOM
- python 学习笔记
- linux下的虚拟内存和分页分段机制
- HDU 6061 RXD and functions(NTT+卷积)
- Android 开发之初识Kotlin
- 剑指offer:树的子结构
- 【LeetCode】004. Median of Two Sorted Arrays
- Django中ORM模型总结(二)[模型类的对应关系,模型类的属性,字段类型]
- Java-HashMap踩坑小记
- Python——切片备忘
- 最大差值(2017某计算机校招笔试试题)
- 百度地图自定义覆盖物及创建多个小图标
- HDU 6075 Questionnaire【】
- 数学、计算机及抽象思维