题目描述
输入两颗二叉树A,B,判断B是不是A的子结构。
思路:二叉树的遍历&递归。
判断A的根节点和B的根节点是否相等:相等,递归判断A的左右子树是否和B的左右子树相等。若不相等,遍历到A的左子树根节点,同样的方法判断根节点是否相等…,遍历到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) {
//判断B是不是A的子结构,即判断B中对应的值是否与A中对应的值完全相等
//二叉树遍历&递归的思想:
//1:遍历到根节点,判断根节点是否相等,然后递归判断左右子树是否相等
//2:如果根节点不相等,遍历到左子树的根节点
//3:如果左子树不想等,遍历到右子树的根节点
boolean hasSubtree=false;
if(root1!=null&&root2!=null){
if(root1.val==root2.val)
hasSubtree=nodesValEqual(root1,root2);
if(!hasSubtree)
hasSubtree=nodesValEqual(root1.left,root2);
if(!hasSubtree)
hasSubtree=nodesValEqual(root1.right,root2);
}
return hasSubtree;
}
public boolean nodesValEqual(TreeNode root1,TreeNode root2){
if(root2==null)
return true;
if(root1==null)
return false;
if(root1.val!=root2.val)
return false;
return nodesValEqual(root1.left,root2.left)&&nodesValEqual(root1.right,root2.right);
}
}