剑指Offer-Java-树的子结构

Posted 水坚石青

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer-Java-树的子结构相关的知识,希望对你有一定的参考价值。

树的子结构


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

package com.sjsq.test;

/**
 * @author shuijianshiqing
 * @date 2020/5/19 20:47
 */

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

public class Solution 

    public boolean HasSubtree(TreeNode root1,TreeNode root2)
        boolean result = false;
        if(root1 != null && root2 != null)
            if(root1.val == root2.val)
                result = HasTree(root1,root2);
            
            if(!result)
                result = HasTree(root1.left,root2);
            
            if(!result)
                result = HasTree(root1.right,root2);
            
        
        return result;
    

    public boolean HasTree(TreeNode root1,TreeNode root2)

        //首先是递归结束条件,递归到B没有子节点时,说明比较完了,B是A子结构
        //遍历到A没有子节点时,说明还有B的子孙节点没有比较,此时B不是A的结构
        //这两句的顺序不能颠倒,因为先判断的B树是否还有节点。
        if(root2 == null)
            return true;
        
        if(root1 == null)
            return false;
        
        if(root1.val != root2.val)
            return false;
        

        //到这里说明传入的两颗树的根节点值相同
        return HasTree(root1.left,root2.left) && HasTree(root1.right,root2.right);
    


以上是关于剑指Offer-Java-树的子结构的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer-Java-二叉搜索树的后序遍历序列

剑指Offer-Java-从上往下打印二叉树

牛客网剑指offer-Java

剑指Offer-Java-包含min函数的栈

剑指Offer-Java-数值的整数次方

剑指Offer-Java-反转链表