面试题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);

        

    }

    

    



}

 

你可能感兴趣的:(面试题)