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);
        }
    
    }
  • 相关阅读:
    第一课 进阶高手的大门
    Codeforces Round #363 (Div. 2) C. Vacations
    HDU 5718 Oracle
    A
    Fibonacci数的后9位
    UESTC 982质因子分解
    UESTC149 解救小Q
    UESTC93 King's Sanctuary
    HDU 4857 逃生
    L1-006. 连续因子
  • 原文地址:https://www.cnblogs.com/Adam-Ye/p/13466261.html
Copyright © 2011-2022 走看看