树的子结构

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

示例1

输入

{8,8,#,9,#,2,#,5},{8,9,#,2}

返回值

true

思路:

1. 设计match函数来匹配在a树中是否含有b树(此时a和b的value值相等);
2. 遍历整个大树,找到与root2的值相等的节点,并使用match函数。

match函数分析:

很明显要使用递归。
递归的基本功能:
如果在a树中发现一个节点的值不等于b树中对应位置的值,则返回false:

        if(a.val != b.val){
            return false;
        }

递归终止条件:
(1) 如果b树已经遍历完,还没有返回false,那么说明b确实是a的子结构;
(2) 如果在b树没有遍历完毕的基础上,a树已经遍历完毕,那么说明b并不是a的子结构。

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1 == null || root2 ==null){
            return false;
        }
        
        return match(root1,root2) || HasSubtree(root1.left,root2)|| HasSubtree(root1.right,root2);
    }

    boolean match(TreeNode a, TreeNode b){
        if(b == null){
            return true;
        }
        if(a == null){
            return false;
        }
        if(a.val != b.val){
            return false;
        }
            return (match(a.left,b.left) && match(a.right,b.right)); 
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 第一想法 如...
    李伟13阅读 1,540评论 2 1
  • 要求:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:参考第一步,...
    是新来的啊强呀阅读 689评论 0 1
  • 这道题之前做过,只是自己又想不起来了。方法就是两次递归+dfs 首先:需要一个函数来判断树B 是不是 树A的子结构...
    棉花糖7阅读 1,553评论 0 0
  • 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 总...
    Mereder阅读 1,287评论 0 0
  • 主要思路:先用dfs来比较以root1和root2为头节点的子树能不能符合题意,如果不能再去递归引入root1.l...
    bangbang2阅读 1,014评论 0 2