题意:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
解题思路
解法1:
1.分析题意,存在三种情况,B是A的左子树的子树,B是A的右子树的子树,B是A的子树
2.由上分析,可知重点在于,如何判定B为A的子树:在A中遍历,如果找到a.val==b.val,此时开始遍历B,如果B遍历到叶子节点,则为A的子树
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if (A == null || B == null) {
return false;
}
return dfs(A, B) || isSubStructure(A.left, B)
|| isSubStructure(A.right, B);
}
private boolean dfs(TreeNode a, TreeNode b) {
if (b == null) {
return true;
}
if (a == null) {
return false;
}
return a.val == b.val && dfs(a.left, b.left) && dfs(a.right, b.right);
}
}
网友评论