zoukankan      html  css  js  c++  java
  • 剑指offer17题

    class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
        }
    }
    
    import javax.swing.tree.TreeNode;
    
    /**
     * 目标:
     * 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
     * <p>
     * 思路:
     * 1、遍历,从A树中找到跟B根节点相同的节点
     * 找到:
     * 从该节点开始,看是否两棵树匹配
     * 没找到:
     * 递归A树左节点
     * 递归A树右节点
     * <p>
     * 2、找到相同根节点之后,
     * 判断以该节点为根节点的子树是否跟B树完全匹配
     * <p>
     * 3、默认返回false
     * <p>
     * 小结:
     */
    public class Solution17 {
        public boolean HasSubtree(TreeNode root1, TreeNode root2) {
            //1、遍历,从A树中找到跟B根节点相同的节点
            if (root1 == null || root2 == null) {
                return false;
            }
            boolean flag = false;
            // 2、找相同根节点
            if (root1.val == root2.val) {
                // 2。1、找到,判断以该节点为根节点的子树是否跟B树完全匹配
                flag = doesHasSubtree(root1, root2);
            }
            // 2。2、没找到,分别从左子树、右子树中找相同的根节点
            if (!flag) {
                flag = HasSubtree(root1.left, root2);
            }
            if (!flag) {
                flag = HasSubtree(root1.right, root2);
            }
            // 3、默认返回false
            return flag;
        }
    
        public boolean doesHasSubtree(TreeNode root1, TreeNode root2) {
            if (root2 == null) {
                return true;
            }
            if (root1 == null || root1.val != root2.val) {
                return false;
            }
            return doesHasSubtree(root1.left, root2.left) && doesHasSubtree(root1.right, root2.right);
        }
    
    }
  • 相关阅读:
    jvm gc 线程
    高分辨率图像建筑物提取数据集制作
    Ubuntu 更改软件源
    后台程序员简单应用前端的bootstrap(小白)
    php--常见算法3
    php--常见算法2
    php--常见算法1
    php三种排序算法
    Django学习之十二:Cache 缓存组件
    Restframe_work 回顾记忆集
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13466261.html
Copyright © 2011-2022 走看看