zoukankan      html  css  js  c++  java
  • <剑指offer> 第15题

    题目:

    输入两棵二叉树A和B,判断B是不是A的子结构

    思路:

    分为两步:

    (1)在树A中找到和B的根节点的值一样的节点R

    (2)判断树A中以R为根节点的子树是不是包含和树B一样的结构

    public class Fifteenth {
        public static class BinaryTreeNode{
            int value;
            BinaryTreeNode left;
            BinaryTreeNode right;
        }
    
        public static boolean hasSubtree(BinaryTreeNode root1, BinaryTreeNode root2){
            if(root1 == root2){
                return true;
            }
            if(root2 == null){
                return true;
            }
            if(root1 == null){
                return false;
            }
    
            //记录匹配结果
            boolean result = false;
    
            //如果节点的值相等就调用匹配方法
            if(root1.value == root2.value){
                result = match(root1, root2);
            }
    
            //如果匹配就直接返回结果
            if(result){
                return true;
            }
    
            return hasSubtree(root1.left, root2) || hasSubtree(root1.right, root2);
        }
    
        public static boolean match(BinaryTreeNode root1, BinaryTreeNode root2){
            //只要两个对象是同一个就返回true
            if(root1 == root2){
                return true;
            }
            if(root2 == null){
                return true;
            }
            if(root1 == null){
                return false;
            }
    
            if(root1.value == root2.value){
                return match(root1.left, root1.left) && match(root1.right, root2.right);
            }
    
            return false;
        }
    }
  • 相关阅读:
    Today
    react-decorator-track 解耦-埋点方案
    Decorator
    webpack4强势来袭
    同源策略与跨域处理
    html语义化
    深度遍历与广度遍历的理解
    Javascript 模块化理解
    算法之排序
    数组去重
  • 原文地址:https://www.cnblogs.com/HarSong13/p/11329758.html
Copyright © 2011-2022 走看看