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

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

    思路

    因为题解的特殊边界问题和搜索树时的跨层问题,需要将递归拆分和改造。
    时间复杂度O(n),空间复杂度O(n)。

    代码

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        private boolean isSubTree(TreeNode A,TreeNode B, int deep) {
            if(B == null)   return true;
            if(A == null)   return false;
            boolean flag = false;
            if(A.val == B.val) {
                // deep参数解决递归搜索时的跨层搜索问题
                flag = isSubTree(A.left, B.left, 2) && isSubTree(A.right, B.right, 2);
            }
            // 仅当两树比对进行到第一层并不满足相等时,才搜索A的子树
            // 若比对进行到非第一层,出现val不等则false
            if(!flag && deep == 1) {
                flag = isSubTree(A.left, B, 1) || isSubTree(A.right, B, 1);
            }
            return flag;
        }
    
        public boolean HasSubtree(TreeNode A, TreeNode B) {
            boolean flag = false;
            //递归出口的判断依赖于A、B的非空情况,根据题目ps的特殊要求,需要A、B都不空再递归
            if(A != null && B != null) {
                flag = isSubTree(A, B, 1);
            }
            return flag;
        }
    }
    

    笔记

    树的边界问题,跨层搜索问题可以通过递归携带deep解决。

  • 相关阅读:
    Java 集合类
    Java 中的四种引用及垃圾回收策略
    Java 类的加载过程(阿里面试题)
    JMeter进行一次简单的压力测试
    python使用 HTMLTestRunner.py生成测试报告
    python读取配置文件
    python的IDE工具-- Pycharm
    selenium webdriver+python基本操作
    SQL开发测试使用基础
    python学习笔记
  • 原文地址:https://www.cnblogs.com/ustca/p/12327874.html
Copyright © 2011-2022 走看看