public class Solution { private class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } //HasSubtree主要是判断树root1中是否含有root2节点 public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root2==null) return false; if(root1==null && root2!=null) return false; boolean flag = false ; if(root1.val==root2.val){ flag = isSubTree(root1,root2); } return flag || HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2) ; } private boolean isSubTree(TreeNode root1, TreeNode root2) { if(root2==null) return true; if(root1==null && root2!=null) return false; if(root1.val==root2.val){ return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right); } return false; } }
1 先采用遍历找出树一中是否含有树二的头结点
2 如果不含有,返回false,如果含有使用isSubTree判断树二是否是树一的子树
联想
不仅对于二叉树,对于任何非线性的数据结构中均可以采用该方法 例如图结构
本文介绍了一种用于判断二叉树是否包含另一棵树为子树的算法,通过递归遍历比较节点值,适用于所有非线性数据结构,如图结构。详细解析了代码实现过程。
567

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



