zoukankan      html  css  js  c++  java
  • 剑指offer:树的子结构

    题目描述:

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    思路:

    1、首先设置标志位result = false,因为一旦匹配成功result就设为true,
    剩下的代码不会执行,如果匹配不成功,默认返回false
    2、递归思想,如果根节点相同则递归调用DoesTree1HaveTree2(),
    如果根节点不相同,则判断tree1的左子树和tree2是否相同,
    再判断右子树和tree2是否相同
    3、注意null的条件,HasSubTree中,如果两棵树都不为空才进行判断,
    DoesTree1HasTree2中,如果Tree2为空,则说明第二棵树遍历完了,即匹配成功,
    tree1为空有两种情况(1)如果tree1为空&&tree2不为空说明不匹配,
    (2)如果tree1为空,tree2为空,说明匹配。

     1 public class TreeZijiegou {
     2     public boolean HasSubtree(TreeNode root1,TreeNode root2) {    
     3          boolean result = false;
     4        // if(root1 == null || root2 == null) result = false;
     5         if(root1!=null&&root2!=null){
     6             if(root1.val == root2.val){
     7                 result = Xiangdeng(root1, root2);
     8             }
     9             if(!result){
    10                 result = HasSubtree(root1.left, root2);
    11             }
    12             if(!result){
    13                 result = HasSubtree(root1.right, root2);
    14             }
    15         }
    16         return result;
    17     }    
    18     public boolean Xiangdeng(TreeNode root1,TreeNode root2){
    19         //boolean res = false;
    20         
    21         if(root2 == null) return  true;
    22         if(root1 == null) return  false;
    23         if(root1.val != root2.val) return  false;
    24         return Xiangdeng(root1.left, root2.left)&&Xiangdeng(root1.right, root2.right);
    25     }
    26     public static void main(String[] args) {
    27         // TODO Auto-generated method stub
    28 
    29     }
    30 
    31 }
  • 相关阅读:
    JAVA 作业:图形界面
    操作系统实验3:内存分配与回收
    PLAN :昔日未来
    操作系统课程:调度算法
    KMP 代码 暂存
    笔试总结篇(一) : 广州X公司笔试
    雨夜静思(一)
    KMP算法详解-- 转自Matrix67
    百度笔试
    lucene中Document删除不了的问题
  • 原文地址:https://www.cnblogs.com/zlz099/p/8649449.html
Copyright © 2011-2022 走看看