zoukankan      html  css  js  c++  java
  • 剑指offer(13)

    题目:

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

    思路:

      判断当前两个根结点是否相等,如果相等,判断左右子树是否相等,如果不依次判断左右子树是否满足上面所述条件。

      为了便于表示,这里采用递归的方式:

    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public boolean HasSubtree(TreeNode root1,TreeNode root2) {
            boolean result = false;
            
            if(root1!=null&&root2!=null){
                if(root1.val==root2.val){
                    result = DoesTree1HaveTree2(root1,root2);
                }
                if(!result){
                    result = HasSubtree(root1.left,root2);
                }
                if(!result){
                    result = HasSubtree(root1.right,root2);
                }
            }
            return result;
        }
        
        private boolean DoesTree1HaveTree2(TreeNode root1,TreeNode root2){
        //这里要注意两个判断的顺序,必须显示root2判断在前,因为如果2树为空则表示这一支树符合题意,如果把root1条件放前,就会导致明明一条支树判断应当结束,却依然进行的情况 if(root2==null){ return true; } if(root1==null) return false; if(root1.val!=root2.val){ return false; } return DoesTree1HaveTree2(root1.left,root2.left)&&DoesTree1HaveTree2(root1.right,root2.right); } }

      

  • 相关阅读:
    Java equals compareTo()的区别
    Java getClass() VS instanceof VS ==
    HashMap与LinkedHashMap
    位运算的一些用例
    常见字符集和编码方式
    spring 打印所有创建的beans
    ApplicationContext之getBean方法详解
    多线程时Autowired自动注入问题
    使用Nexus创建Maven私服
    MYSQL timestamp用法
  • 原文地址:https://www.cnblogs.com/figsprite/p/10470797.html
Copyright © 2011-2022 走看看