剑指offer 17树的子结构
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
1、分析
判断A,B的根节点是否一样。
若不一样,判断A的左孩子和B的根节点是否一样,
同理可判断A的右孩子和B的根节点是否一样。
如果上述情况都不满足则说明不包含如果找到了A中有值和B中的根节点相同,则比较左右子树是否相同。
如果B为空了,则说明包含
如果A为空了,则说明不包含
2、代码实现
/** 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) { if(root1 == null || root2 == null){ return false; } //如果找到与子树相同根的值,走判断方法 if(root1.val == root2.val){ if(judgement(root1,root2)){ return true; } } //遍历左孩子,右孩子 return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2); } //判断是否是子结构 public boolean judgement(TreeNode root1, TreeNode root2) { //子结构已经循环完毕,代表全部匹配 if(root2 == null){//如果B为空了,则说明包含 return true; } //大树已经循环完毕,并未成功匹配 if(root1 == null){//如果A为空了,则说明不包含 return false; } //相等后判断左右孩子 if(root1.val == root2.val){ return judgement(root1.left, root2.left) && judge(root1.right, root2.right); } return false; } }
全部评论
(0) 回帖