leetcode[Subtree of Another Tree]//待整理多种解法
2017-08-18 14:18
573 查看
解法一:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//判断在二叉树s中是否存在一棵子树,使得该子树与二叉树t存在相同的结构,并且每个结点的值相同
//既然要每个结点的值相同,那么就在二叉树s中找出所有二叉树t的根节点的值相同的结点,然后再判断具体的结构是否相同
private void recurseFind(TreeNode root, List<TreeNode> list, int find){
if(root == null) return;
if(root.val == find){
list.add(root);
}
recurseFind(root.left, list, find);
recurseFind(root.right, list, find);
}
private void recurse(TreeNode root, List<TreeNode> list){
if(root == null) return;
list.add(root);
recurse(root.left, list);
recurse(root.right, list);
}
private boolean isSame(TreeNode a, TreeNode b){
//判断两棵二叉树是否相同,就将两棵树采用相同的遍历方式,然后遍历结点分别存入容器,最后来比较两个容器
List<TreeNode> listA = new ArrayList<>();
List<TreeNode> listB = new ArrayList<>();
recurse(a, listA);
recurse(b, listB);
if(listA.size() != listB.size()) return false;
while(!listA.isEmpty()){
if(listA.remove(0).val != listB.remove(0).val){
return false;
}
}
return true;
}
public boolean isSubtree(TreeNode s, TreeNode t) {
if(t == null) return true;
if(s == null && t != null) return false;
List<TreeNode> list = new ArrayList<>();//用一个容器来存放二叉树s中所有与二叉树t的根节点的值相同的结点
recurseFind(s, list, t.val);
boolean flag = false;
while(!flag && !list.isEmpty()){
//每次从List中移除一个检点,判断以这个结点为根的树是否与二叉树t具有相同的结构(并且每个结点的值相同)
TreeNode out = list.remove(0);
flag = isSame(out, t);
}
return flag;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//判断在二叉树s中是否存在一棵子树,使得该子树与二叉树t存在相同的结构,并且每个结点的值相同
//既然要每个结点的值相同,那么就在二叉树s中找出所有二叉树t的根节点的值相同的结点,然后再判断具体的结构是否相同
private void recurseFind(TreeNode root, List<TreeNode> list, int find){
if(root == null) return;
if(root.val == find){
list.add(root);
}
recurseFind(root.left, list, find);
recurseFind(root.right, list, find);
}
private void recurse(TreeNode root, List<TreeNode> list){
if(root == null) return;
list.add(root);
recurse(root.left, list);
recurse(root.right, list);
}
private boolean isSame(TreeNode a, TreeNode b){
//判断两棵二叉树是否相同,就将两棵树采用相同的遍历方式,然后遍历结点分别存入容器,最后来比较两个容器
List<TreeNode> listA = new ArrayList<>();
List<TreeNode> listB = new ArrayList<>();
recurse(a, listA);
recurse(b, listB);
if(listA.size() != listB.size()) return false;
while(!listA.isEmpty()){
if(listA.remove(0).val != listB.remove(0).val){
return false;
}
}
return true;
}
public boolean isSubtree(TreeNode s, TreeNode t) {
if(t == null) return true;
if(s == null && t != null) return false;
List<TreeNode> list = new ArrayList<>();//用一个容器来存放二叉树s中所有与二叉树t的根节点的值相同的结点
recurseFind(s, list, t.val);
boolean flag = false;
while(!flag && !list.isEmpty()){
//每次从List中移除一个检点,判断以这个结点为根的树是否与二叉树t具有相同的结构(并且每个结点的值相同)
TreeNode out = list.remove(0);
flag = isSame(out, t);
}
return flag;
}
}
相关文章推荐
- leetcode[Average of Levels in Binary Tree]//待整理多种解法
- leetcode [Minimum Depth of Binary Tree]//待整理多种解法
- leetcode[Lowest Common Ancestor of a Binary Search Tree]//待整理多种解法
- leetcode[Diameter of Binary Tree]//待整理多种解法
- leetcode(572):Subtree of Another Tree
- leetcode[Convert BST to Greater Tree]//待整理多种解法
- leetcode[Binary Tree Tilt]//待整理多种解法
- LeetCode Subtree of Another Tree
- LeetCode@Tree_572_Subtree_of_Another_Tree
- LeetCode 572 Subtree of Another Tree
- LeetCode Subtree of Another Tree
- LeetCode: Subtree of Another Tree
- 【LeetCode】Subtree of Another Tree 解题报告
- leetcode专题—Subtree of Another Tree
- leetcode 572 Subtree of Another Tree
- leetcode[Find Mode in Binary Search Tree]//待整理多种解法
- leetcode[Binary Tree Paths]//待整理多种解法
- leetcode [Power of Two]//待整理多种解法
- leetcode[Number of Segments in a String]//待整理多种解法
- 【Leetcode-easy-572】Subtree of Another Tree