zoukankan      html  css  js  c++  java
  • 面试题18:树的子结构

    package com.hb.jzoffer;
    
    import javax.swing.text.Position.Bias;
    
    import offer.utilities.BinaryTreeNode;
    //面试题18:树的子结构
    /*
     * 题目:输入两颗二叉树 A 和 B ,判断 B 是不是 A 的子结构。
     */
    public class SubstructureInTree_18 {
        
        public boolean  hasSubTree(BinaryTreeNode pRoot1 , BinaryTreeNode  pRoot2){
            boolean result = false;
            
            if(pRoot1 != null  && pRoot2 != null){
                if(pRoot1.val == pRoot2.val){
                    result = doesTree1HavaTree2(pRoot1 , pRoot2);
                }
                if(!result){
                    result = hasSubTree(pRoot1.pLeft, pRoot2);
                }
                if(!result){
                    result = hasSubTree(pRoot1.pRight, pRoot2);
                }
            }
            
            return  result ;
        }
    
        public boolean doesTree1HavaTree2(BinaryTreeNode pRoot1, BinaryTreeNode pRoot2) {
            // TODO Auto-generated method stub
            if(pRoot2 == null){
                return true ;
            }
            
            if(pRoot1 == null){
                return false;
            }
            
            if(pRoot1.val != pRoot2.val){
                return false;
            }
            
            return doesTree1HavaTree2(pRoot1.pLeft , pRoot2.pLeft) && doesTree1HavaTree2(pRoot1.pRight, pRoot2.pRight);
        }
        
        public static void main(String[] args) {
            BinaryTreeNode  rootA = new BinaryTreeNode(8) ;
            BinaryTreeNode  nodeA_1 = new BinaryTreeNode(8);
            BinaryTreeNode  nodeA_2= new BinaryTreeNode(7);
            
            BinaryTreeNode  nodeA_1_1 = new BinaryTreeNode(9);
            BinaryTreeNode  nodeA_1_2 = new BinaryTreeNode(2);
            
            BinaryTreeNode  nodeA_1_2_1 = new BinaryTreeNode(4);
            BinaryTreeNode  nodeA_1_2_2 = new BinaryTreeNode(7);
            
            rootA.pLeft = nodeA_1 ;
            rootA.pRight = nodeA_2;
            nodeA_1.pLeft = nodeA_1_1;
            nodeA_1.pRight = nodeA_1_2;
            
            nodeA_1_2.pLeft = nodeA_1_2_1;
            nodeA_1_2.pRight = nodeA_1_2_2;
            
            
            BinaryTreeNode  rootB = new BinaryTreeNode(8) ;
            BinaryTreeNode  nodeB_1 = new BinaryTreeNode(9) ;
            BinaryTreeNode  rootB_2 = new BinaryTreeNode(2) ;
            rootB.pLeft = nodeB_1;
            rootB.pRight = rootB_2;
            
            SubstructureInTree_18  subtree = new SubstructureInTree_18();
            boolean  result = subtree.hasSubTree(rootA, rootB);
            System.out.println(result);
            
        }
        
        
    
    }
  • 相关阅读:
    POJ 2987:Firing(最大权闭合图)
    BZOJ 1001:[BeiJing2006]狼抓兔子(最小割)
    HDU 1007:Quoit Design(分治求最近点对)
    POJ 1986:Distance Queries(倍增求LCA)
    HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)
    BZOJ-1011 遥远的行星
    BZOJ-1044 木棍分割
    BZOJ-1042 硬币购物
    BZOJ-1050 旅行
    BZOJ-1037 生日聚会
  • 原文地址:https://www.cnblogs.com/Mokaffe/p/4360941.html
Copyright © 2011-2022 走看看