输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
2017-08-23 15:12
573 查看
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.LinkedList; public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null||root2==null) return false; else//都不为空的情况下 { //由于找到在A树(root1为根节点)找到的与B树根节点相同的节点不一定就一个,利用广度优先遍历进行遍历搜索 LinkedList<TreeNode> list=new LinkedList<TreeNode>(); list.add(root1); while(!list.isEmpty()) { TreeNode temp=isContain(list.poll(),root2); if(temp!=null) { if(find(temp,root2)) { return true; } else { if(temp.left!=null) list.add(temp.left); if(temp.right!=null) list.add(temp.right); } } } return false; } } //root1为在Tree1中值与root2相同的节点,判断以root2为根节点的树是不是和root1中的部分完全对应 public static boolean find(TreeNode root1,TreeNode root2) { LinkedList<TreeNode> list1=new LinkedList<TreeNode>(); LinkedList<TreeNode> list2=new LinkedList<TreeNode>(); list1.add(root1); list2.add(root2); while(!list2.isEmpty()) { TreeNode temp1=list1.poll();//从队列头移除元素 TreeNode temp2=list2.poll();//从队列头移除元素 if(temp1.val==temp2.val)//节点值相等就继续找左右子节点 { if(temp1.left!=null&&temp2.left!=null) //同时为空或同时不为空 { list1.add(temp1.left); list2.add(temp2.left); } else if(temp1.left==null&&temp2.left==null){} else if(temp2.left==null&&temp1.left!=null){} else return false; if(temp1.right!=null&&temp2.right!=null) { list1.add(temp1.right); list2.add(temp2.right); } else if(temp1.right==null&&temp2.right==null){} else if(temp2.right==null&&temp1.right!=null){} else return false; } else { return false; } } return true; } public static TreeNode isContain(TreeNode root1,TreeNode root2)//广度优先遍历找到从root1节点开始向下的第一个值与root2相同的节点 { LinkedList<TreeNode> list=new LinkedList<TreeNode>(); list.add(root1); TreeNode result=null; while(!list.isEmpty()) { TreeNode temp=list.poll();//从队列头移除元素 if(temp.val==root2.val)//找到与其根节点相同的节点 { result=temp; break; } else { if(temp.left!=null) list.add(temp.left); if(temp.right!=null) list.add(temp.right); } } return result; } }
相关文章推荐
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 剑指offer-输入两棵二叉树A,B,判断B是不是A的子结构(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)
- 第6天 输入两棵二叉树A和B,判断B是不是A的子结构。
- 15.输入两棵二叉树A,B,判断B是不是A的子结构
- 输入两棵二叉树A,B,判断B是不是A的子结构。
- 剑指offer 18---输入两棵二叉树A和B,判断B是不是A的子结构
- 题目:输入两棵二叉树A和B,判断B是不是A的子结构。
- java实现输入两棵二叉树A,B,判断B是不是A的子结构
- 剑指offer:输入两棵二叉树A,B,判断B是不是A的子结构(Python)
- 输入两棵二叉树A,B,判断B是不是A的子结构
- java 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。