题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
##代码实现(Java)
一般情况下有关树的算法题考虑用递归。因为树的定义就是递归的。
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if(root2 == null) return false;
if(root1 == null) return false;
boolean flag = false;
if(root1.val==root2.val){
flag = isSubtree(root1,root2);
}
if(!flag){
flag = HasSubtree(root1.left, root2);
if(!flag){
flag = HasSubtree(root1.right, root2);
}
}
return flag;
}
private boolean isSubtree(TreeNode root1, TreeNode root2){
if(root2 == null) return true;
if(root1 == null) return false;
if(root1.val == root2.val) return isSubtree(root1.left, root2.left) && isSubtree(root1.right, root2.right);
return false;
}
题目及其解法均来源于牛客网–剑指offer
更少的代码
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root2 == null) return false;
if(root1 == null) return false;
if(isSubtreeCore(root1, root2)) return true;
return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}
private boolean isSubtreeCore(TreeNode root1,TreeNode root2){
if(root2 == null) return true;
if(root1 == null) return false;
if(root1.val != root2.val) return false;
return isSubtreeCore(root1.left, root2.left) && isSubtreeCore(root1.right, root2.right);
}
}
5440

被折叠的 条评论
为什么被折叠?



