//思路是使用递归,若根节点相等,则比较左右子树是否相等,否则分别判断该树的左子树或右子树是否包含原来的树,两者有一个为真即可 //具体实现代码如下 class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Cat { public boolean HasSubtree(TreeNode root1, TreeNode root2) { if (root2 == null || root1 == null) { return false; } return isHastree(root1,root2,root2); } public boolean isHastree(TreeNode Node1,TreeNode Node2,TreeNode root2) { if (Node2 == null) { return true; } if (Node1 == null && Node2 != null) { return false; } //假设两个都有 若节点值相等 if (Node1.val == Node2.val) { //判断两个左右节点值是否相等 boolean flag = isHastree(Node1.left, Node2.left, root2) && isHastree(Node1.right, Node2.right, root2); //若两树的左子树与右子树不想等 判断 右子树 或左子树是否包含root2 if (!flag) { return isHastree(Node1.right, root2, root2) || isHastree(Node1.left, root2, root2); } //左右子树相等 return flag; } //两个子树根节点不相等,断 右子树 或左子树是否包含root2 return isHastree(Node1.right, root2, root2) || isHastree(Node1.left, root2, root2); // 若不想等 左右子树有一个包含该树即可 } }
判断一个树结构是否包含另一个树
猜你喜欢
转载自blog.csdn.net/qq_32459653/article/details/81165709
今日推荐
周排行