题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路
首先要找出A树的哪些节点和B树的根节点的值相等,这才有可能使得B称为A的一个子结构。
之后再对与B树根节点值相等的子树判断每一个叶子节点的值是否相等。
需要写两个函数,一个找出相等的节点,一个判断叶子节点是否相等。
都是用递归实现的。
代码实现
/**
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;
}
boolean res = isEqual(root1, root2);
if(res) {
return true;
}
else {
return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}
}
public boolean isEqual(TreeNode node1, TreeNode node2) {
if(node2 == null) {
return true;
}
if(node1 == null) {
return false;
}
if(node1.val == node2.val) {
return isEqual(node1.left, node2.left) && isEqual(node1.right, node2.right);
}
else {
return false;
}
}
}