题目:
输入两棵二叉树A和B,判断B是不是A的子结构
思路:
分为两步:
(1)在树A中找到和B的根节点的值一样的节点R
(2)判断树A中以R为根节点的子树是不是包含和树B一样的结构
public class Fifteenth { public static class BinaryTreeNode{ int value; BinaryTreeNode left; BinaryTreeNode right; } public static boolean hasSubtree(BinaryTreeNode root1, BinaryTreeNode root2){ if(root1 == root2){ return true; } if(root2 == null){ return true; } if(root1 == null){ return false; } //记录匹配结果 boolean result = false; //如果节点的值相等就调用匹配方法 if(root1.value == root2.value){ result = match(root1, root2); } //如果匹配就直接返回结果 if(result){ return true; } return hasSubtree(root1.left, root2) || hasSubtree(root1.right, root2); } public static boolean match(BinaryTreeNode root1, BinaryTreeNode root2){ //只要两个对象是同一个就返回true if(root1 == root2){ return true; } if(root2 == null){ return true; } if(root1 == null){ return false; } if(root1.value == root2.value){ return match(root1.left, root1.left) && match(root1.right, root2.right); } return false; } }