Q18:数的子结构

来源:互联网 发布:满岛光 知乎 编辑:程序博客网 时间:2024/06/05 19:50

importBinaryTree.BinaryTreeNode;

//输入两个棵二叉树AB,判断B是不是A的子结构。

publicclass Q18 {

   publicstatic void main(String[] args) {

      //创建二叉树A的结点

      BinaryTreeNode root1 = newBinaryTreeNode();

      BinaryTreeNode node1 = newBinaryTreeNode();

      BinaryTreeNode node2 = newBinaryTreeNode();

      BinaryTreeNode node3 = newBinaryTreeNode();

      BinaryTreeNode node4 = newBinaryTreeNode();

      BinaryTreeNode node5 = newBinaryTreeNode();

      BinaryTreeNode node6 = newBinaryTreeNode();

      //二叉树A结点间的结点关系

      root1.leftNode = node1;

      root1.rightNode = node2;

      node1.leftNode = node3;

      node1.rightNode = node4;

      node4.leftNode = node5;

      node4.rightNode = node6;

      //对二叉树A赋值

      root1.value = 8;

      node1.value = 8;

      node2.value = 7;

      node3.value = 9;

      node4.value = 2;

      node5.value = 4;

      node6.value = 7;

      //构建二叉树B的结点

      BinaryTreeNode root2 = newBinaryTreeNode();

      BinaryTreeNode nodea = newBinaryTreeNode();

      BinaryTreeNode nodeb = newBinaryTreeNode();

      //二叉树B结点间的关系

      root2.leftNode = nodea;

      root2.rightNode = nodeb;

      //二叉树结点的值

      root2.value = 8;

      nodea.value = 9;

      nodeb.value = 2;

     

      Q18 testQ18 = new Q18();

      System.out.println("二叉树A是否包含二叉树B?");

      if(testQ18.HasSubTree(root1, root2)==true){

         System.out.println("");

      }

      else {

         System.out.println("");

      }

   }

   //判断二叉树A是否包含二叉树B,该方法就是寻找A中值等于B的根的值

   publicstatic boolean HasSubTree(BinaryTreeNode root1,BinaryTreeNode root2){

      boolean result=false;

      if(root1 !=null && root2 != null){

         //AB根节点值相等时调用Tree1HaveTree2方法()

         if(root1.value == root2.value){

            result = Tree1HaveTree2(root1,root2);

         }

         //A的根节点值不等于B的根节点的值,则判断A的左子节点的值是否等于B的根节点的值

         if(!result){

            result = HasSubTree(root1.leftNode, root2);

         }

         //A的根节点值不等于B的根节点的值,则判断A的右子节点的值是否等于B的根节点的值

         if(!result){

            result = HasSubTree(root1.rightNode, root2);

         }

      }

      return result;

   }

   publicstatic boolean Tree1HaveTree2(BinaryTreeNode root1,BinaryTreeNode root2){

      if(root2 ==null)

         returntrue;

      if(root1 ==null)

         returnfalse;

      if(root1.value != root2.value)

         returnfalse;

      //root1.valueroot2.value相等的情况递归判断左右子节点的值,在左右子节点值都相等情况下才返回True

      returnTree1HaveTree2(root1.leftNode, root2.leftNode)&&

      Tree1HaveTree2(root1.rightNode, root2.rightNode);

   }

 

}

0 0
原创粉丝点击