标签:
public class Solution { private class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } //HasSubtree主要是判断树root1中是否含有root2节点 public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root2==null) return false; if(root1==null && root2!=null) return false; boolean flag = false ; if(root1.val==root2.val){ flag = isSubTree(root1,root2); } return flag || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2) ; } private boolean isSubTree(TreeNode root1, TreeNode root2) { if(root2==null) return true; if(root1==null && root2!=null) return false; if(root1.val==root2.val){ return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right); } return false; } }
1 先采用遍历找出树一中是否含有树二的头结点
2 如果不含有,返回false,如果含有使用isSubTree判断树二是否是树一的子树
联想
不仅对于二叉树,对于任何非线性的数据结构中均可以采用该方法 例如图结构
标签:
原文地址:http://www.cnblogs.com/winAlaugh/p/5447563.html