• 树的子结构



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

    直接递归,
    递归结束条件:如果root2为空,返回true(提前判断了root2一开始就为空的情况),那么在root2不为空的情况下,root1为空,说明这里肯定不对,返回false;
    主要逻辑判断:如果root1.val==root2.val,那么此时有两种情况,包含这个root节点是子结构的一部分,所以我们进入
    1
    helper(root1.left,root2.left)&&helper(root1.right,root2.right)
    如果不包含这个节点,我们就不能取这个root,所以进入
    1
    helper(root1.left,root2)||helper(root1.right,root2)
    两种情况一种成立就可以,所以中间用||连接
    回到开始,如果root1.val!=root2.val,也就是进入那个else判断,那么我们就直接返回这个结果就可以了。
    1
    helper(root1.left,root2)||helper(root1.right,root2)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /**
    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) {
            if(root2==null)
                return false;
            return helper(root1,root2);
        }
        public boolean helper(TreeNode root1,TreeNode root2)
        {
            if(root2==null)
                return true;
            if(root1==null)
                return false;
            if(root1.val==root2.val)
                return (helper(root1.left,root2.left)&&helper(root1.right,root2.right))||(helper(root1.left,root2)||helper(root1.right,root2));
            else
                return helper(root1.left,root2)||helper(root1.right,root2);
        }
    }
  • 相关阅读:
    python计算机视觉项目实践
    Codeforces Round #256 (Div. 2) B (448B) Suffix Structures
    SonarLint插件的安装与使用
    后缀表达式求值
    有用代码段2
    提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释
    Intellij Idea搭建Spark开发环境
    代码备忘, TODO宏实现
    浏览器自己主动填表安全漏洞:查看浏览器保存的password
    PDO 查询mysql返回字段整型变为String型解决方法
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11534398.html
Copyright © 2020-2023  润新知