树二:树的子结构
/**
* 题目:树的子结构
* 描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
* 解决方案:思路: 1.是子树分为三种情况①当前结点已经是子树了,②当前结点左孩子存在子树③当前结点右孩子存在子树
* 2.判断是否是子树必须满足:结点值相等,左右节点的值也相等。
* 从根节点开始,判断两个节点是否符合条件, 然后根节点的左子树、根节点的右子树;
* */
public class Two { public static boolean hasSubTree(TreeNode tree1,TreeNode tree2) { if(tree1 == null || tree2 == null) { return false; } return isSubTree(tree1, tree2)|| hasSubTree(tree1.left, tree2) || hasSubTree(tree1.right,tree2); } public static boolean isSubTree(TreeNode tree1,TreeNode tree2) { if(tree2 == null) { return false; //空树不是任意一个树的子结构 ,如果约定空树是子结构,返回true } if(tree1 == null) { return false; } if(tree1.var == tree2.var) { return isSubTree(tree1.left, tree2.left) && isSubTree(tree1.right,tree2.right); }else { return false; } } static class TreeNode{ int var; TreeNode left; TreeNode right; } }
天助自助者