leetcode[Subtree of Another Tree]//待整理多种解法

来源:互联网 发布:董小飒淘宝零食店 编辑:程序博客网 时间:2024/06/05 15:36

解法一:

/** * 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;    }}


阅读全文
0 0
原创粉丝点击