题目描述: 输入两颗二叉树A和B,判断B是不是A的子结构。
题目分析:一般树的操作都是通过递归实现的,每次使用指针的时候,都要分析一下这个指针有没有可能是空指针,如果是空指针怎么处理。
代码如下:
/**
* 输入两颗二叉树A,B,判断B是不是A的子结构。
*
* @param root1
* @param root2
* @return
*/
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root1 == null || root2 == null)
return false;
// 先从树A的根节点开始判断,如果不成立,则分别递归判断树A的左右子树
return isSubTree(root1, root2) ||
HasSubtree(root1.left, root2) ||
HasSubtree(root1.right, root2);
}
public boolean isSubTree(TreeNode root1, TreeNode root2) {
// 此处必须先判断root是否为空,否则无法通过所有用例
if (root2 == null)
return true;
if (root1 == null)
return false;
if (root1.val != root2.val)
return false;
// 对应的左右节点的值必须完全相等
return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right);
}