题目描述:
标签:树 深度优先搜索 二叉树
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
代码:
思路分析:
1、先序遍历二叉树A,即体现在isSubStructure的return写法上,先用二叉树A的根节点和二叉树B作对比,调用isSubTree方法,再用A.left和B对比,最后用A.right和B对比,即是一个"中-左-右"的先序遍历顺序。
2、对比是否是子树的方法isSubTree()方法实现思路:
①递归结束条件:
如果root2==null,说明B已经完成匹配,返回true
如果root1==null,说明A越过叶子结点还没匹配B,返回false
如果当前root1.val != root2.val,匹配失败,返回false
② 当前值匹配成功的话,就递归看他们左子树和右子树是否匹配
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(A == null || B == null){
return false;
}
return isSubTree(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
public boolean isSubTree(TreeNode root1, TreeNode root2){
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);
}
}