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

 

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

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

public class BinaryTreeNode{
       int value;
       BinaryTreeNode left;
       BinaryTreeNode right;

       public BinaryTreeNode(int val,BinaryTreeNode leftNode,BinaryTreeNode rightNode){
              this.value=val;
              this.left=leftNode;
              this.right=rightNode;
       }
}
public class Solution{
      public static boolean hasSubTree(BinaryTreeNode node1,BinaryTreeNode2 node2){
             boolean result=false;
             if(node1!=null&&node2!=null){
                    //如果值相等,比较剩余结点的值是否相等
                    if(node1.value==node2.value){
                          result=doesTree1HasTree2(node1,node2);
                    }
                    //当前结点的左子结点是否包含目标结点
                     if(!result){
                          result=hasSubTree(node1.left,node2);  
                     }
                    //当前结点的右子结点是否包含目标结点
                     if(!result){
                          result=hasSubTree(node1.right,node2);
                     }                    
             }
             return result;
      }
 
      public static boolean doesTree1HasTree2(BinaryTreeNode node1,BinaryTreeNode node2){
            //node2为null,不管node1为何值,结果都为true
             if(node2==null){
                    return true;
             }
             //node2为非null,node1为null,结果为false
              if(node1==null){
                    return false;
              }
               //比较当前两个的值是否相等
               if(node1.value!=node2.value){
                    return false;
               }
              //进行下一个结点的比较
               return doesTree1HasTree2(node1.left,node2.left)&&doesTree1HasTree2(node1.right,node2.right);
      }

       public static void main(String[] args){
               BinaryTreeNode node7=new BinaryTreeNode (7,null,null);
               BinaryTreeNode node6=new BinaryTreeNode (4,null,null);
               BinaryTreeNode node5=new BinaryTreeNode (2,node6,node7);
               BinaryTreeNode node4=new BinaryTreeNode (9,null,null);
               BinaryTreeNode node3=new BinaryTreeNode (8,node4,node5);
               BinaryTreeNode node2=new BinaryTreeNode (7,null,null);
               BinaryTreeNode node1=new BinaryTreeNode (8,node2,node3);
   
               BinaryTreeNode node8=new BinaryTreeNode (9,null,null);
               BinaryTreeNode node9=new BinaryTreeNode (2,null,null);
               BinaryTreeNode node10=new BinaryTreeNode (12,node8,node9);
               System.out.println("node1 has a sub tree node10? "+hasSubTree(node1,node10));
       }
}

 

 posted on 2018-10-16 21:28  会飞的金鱼  阅读(167)  评论(0)    收藏  举报