题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路: 本题考察递归, 首先判断B是否刚好等于A, 然后判断B是否是A的左子树的子结构,B是否是A的右子树的子结构
在判断是否相等的过程中,同样用到了递归。 首先判断A、B节点值是否相同,然后判断A、B的左孩子节点值是否相同,并依次递归下去。
Java代码如下:
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1 == null || root2 == null) return false; return isSubtree(root1, root2) || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } public boolean isSubtree(TreeNode A, TreeNode B) { if(B == null) return true; //要先于A判断 if(A == null) return false; if(A.val == B.val) { return isSubtree(A.left, B.left) && isSubtree(A.right, B.right); } return false; } }