树的子结构 (剑指Offer 第 16 题)
2017-11-17 10:45
309 查看
题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路:
从A树根开始往下遍历,遍历到的每一个节点,都看做是一个新的根,然后与B比较是否相同。以上主要分为2块:
A树的遍历 + A子树与B树比较是否相同。对于第一块可以采用递归来遍历,对于第二块也采用递归来逐个对应遍历比较。
Java代码实现:
END
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路:
从A树根开始往下遍历,遍历到的每一个节点,都看做是一个新的根,然后与B比较是否相同。以上主要分为2块:
A树的遍历 + A子树与B树比较是否相同。对于第一块可以采用递归来遍历,对于第二块也采用递归来逐个对应遍历比较。
Java代码实现:
public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if (root1==null && root2!=null) return false;//递归出口1 if (root2==null) return false;//递归出口2 boolean flag = false; if (root1.val==root2.val){ flag = isSubtree(root1, root2); } if (!flag){ flag = HasSubtree(root1.left, root2)||HasSubtree(root1.right, root2);//A树的递归遍历 } return flag; } public boolean isSubtree(TreeNode root1, TreeNode root2){ if (root1==null&&root2!=null) return false;//递归出口1 if (root2==null) return true;//递归出口2 if (root1.val==root2.val)//采用递归来逐个对应遍历比较 return isSubtree(root1.left, root2.left)&&isSubtree(root1.right, root2.right); else return false; } }
END
相关文章推荐
- [剑指offer]树的子结构
- 牛客-剑指offer-树的子结构
- 剑指offer-面试题 18:树的子结构
- 剑指offer-17.树的子结构
- [剑指Offer] 17.树的子结构
- 剑指offer_面试题18_树的子结构
- 剑指offer——树的子结构 (JAVA代码)
- 剑指offer--面试题16:数值的整数次方
- 剑指offer,树的子结构
- 剑指offer-寻找树的子结构
- 剑指offer——面试题16:反转链表
- 【剑指offer】3.4代码的鲁棒性——面试题18:树的子结构
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- 剑指offer面试题16之反转链表
- 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解
- 剑指Offer(16)______合并两个排序的链表
- 剑指Offer——树的子结构
- 剑指offer——树的子结构
- 剑指offer-面试题18:树的子结构
- 【剑指offer-解题系列(16)】合并两个排序的列表