• 面试题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);
            
        }
        
        
    
    }
  • 相关阅读:
    poj3180 The Cow Prom
    洛谷P1434 滑雪
    洛谷P1199 三国游戏
    洛谷P1230 智力大冲浪
    洛谷P1012 拼数
    洛谷P1106 删数问题
    bzoj3538 [Usaco2014 Open]Dueling GPS
    Android(java)学习笔记134:Android数据存储5种方式总结
    Android(java)学习笔记133:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger
    Android(java)学习笔记132:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。
  • 原文地址:https://www.cnblogs.com/Mokaffe/p/4360941.html
Copyright © 2020-2023  润新知