标签:treenode 左右子树 block lse boolean 树遍历 输入 code 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
递归思想,如果根节点相同则递归调用match(),如果根节点不相同,则判断root1
的左子树或右子树与root2
是否相同。
注意节点为空的条件,HasSubtree
中,只要有一棵树树为空就返回false
; match
中,要先判断root2
,如果root2
为空,则说明第二棵树遍历完了,即匹配成功。
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
//有一棵树为空,返回false
if(root1 == null || root2 == null){
return false;
}
return match(root1, root2) || //两棵树根节点相同
HasSubtree(root1.left, root2) || //root1的左子树与root2比较
HasSubtree(root1.right, root2); //root1的右子树与root2比较
}
public boolean match(TreeNode root1,TreeNode root2){
//要先判断root2,root2为空说明遍历结束,匹配成功
if(root2 == null) return true;
//root2不为null,root1为null,root2还没完全匹配,root1已经遍历结束
if(root1 == null) return false;
//两个节点的value相同,比较左右子树是否都相同
if(root1.val == root2.val){
return match(root1.left,root2.left) && match(root1.right,root2.right);
}else{
return false;
}
}
标签:treenode 左右子树 block lse boolean 树遍历 输入 code 树的子结构
原文地址:https://www.cnblogs.com/le-le/p/12431626.html