树的子结构
题目:输入两棵二叉树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;
}

浙公网安备 33010602011771号