zoukankan      html  css  js  c++  java
  • 树的子结构

    题目:
    输入两棵树A和B。推断B是不是A的子结构
    比如:右边的便是左边的子结构

               8                        4
             /                       /  
            4     9                  2    5
           / 
          2   5
    

    二叉树我们非常easy会想到递归,这里我们的思路是:
    先找到两棵二叉树同样的某一节点,然后依次递归深入,推断两棵树是否拥有共同的子结构就可以。

    public static boolean hasSubtree(BinaryTree rootOne,BinaryTree rootTwo)
        {
            boolean result=false;
            if(rootOne!=null&&rootTwo!=null)
            {
                if(rootOne.value==rootTwo.value)
                    result = HasSameTree(rootOne,rootTwo);
                if(!result)
                    result = hasSubtree(rootOne.left,rootTwo);
                if(!result)
                    result = hasSubtree(rootOne.right,rootTwo);
            }
    
    
            return result;
        }
    
    
    
        private static boolean HasSameTree(BinaryTree rootOne, BinaryTree rootTwo) {
             //假设是第二个为空,说明已经第二个遍历完成,则肯定是子结构
            if(rootTwo==null)return true;
            //在第二个还没有遍历完的时候第一个已经完了,那么肯定不是子结构
            if(rootOne==null)return false;
            if(rootOne.value != rootTwo.value)
                return false;
    
            return HasSameTree(rootOne.left,rootTwo.left)&&HasSameTree(rootOne.right,rootTwo.right);
    
        }

    为了方便观看,我们能够输出二叉树的前序和中序遍历验证是否为子结构。

  • 相关阅读:
    Macbook键盘的使用基础技巧
    JSTL详解
    为了理想,因为爱情-开课第一天有感(鸡汤向)
    HK游记 Day2迪斯尼(下)
    MP20 MBO issue summary
    音频测量加权
    有没有降噪
    信源编码信源译码和信道编码和译码和加密和解密数字调制和解调和同步
    gcc
    数据挖掘|统计的艺术
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7064223.html
Copyright © 2011-2022 走看看