树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
给定的树节点结构:
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }
一开始想在一个方法里面递归,看能不能得出结果,试了几次都失败了。最后只能将判断是否为子树的方法单独提出来,分成两个方法,一个寻找根节点,另一个由这个根节点root1开始,判断root2是否是root1的子树。
代码如下:
public boolean HasSubtree(TreeNode root1, TreeNode root2) { if (root1 == null || root2 == null) return false; //以root1为根节点,判断root2是否为子树 if (isSub(root1, root2)) { return true; } //以左右子树为新的根节点,递归 return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } public boolean isSub(TreeNode root1, TreeNode root2) { if (root2 == null) return true; if (root1 == null) return false; //根节点相等,以左右子树为新的根节点判断是否相等 if (root1.val == root2.val) return isSub(root1.left, root2.left) && isSub(root1.right, root2.right); return false; }