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);
            
        }
        
        
    
    }
  • 相关阅读:
    自定义控件类
    初探ListView和Adapter
    探究android控件及布局
    页面布局之一边固定一边自适应
    cavans 文字换行
    移动开发01 页面取消横向滚动条
    移动端rem,scale动态设置
    map,area标签
    css3属性——border-radius用法
    z-index要同级比较,absolute包含块外有overflow-hidden
  • 原文地址:https://www.cnblogs.com/Mokaffe/p/4360941.html
Copyright © 2011-2022 走看看