100/101/572. 相等树/镜像树/树的子结构

  • 100 相等树
    思路:1. 先思考常规情况,pq均不为None;2. 再思考退出条件,pq至少一个为None。
    def isSameTree(self, p, q):
        """
        :type p: TreeNode
        :type q: TreeNode
        :rtype: bool
        """
        # 左右都没有val的情况
        if not p and not q:
            return True
        # 左右有一个没有val的情况
        if not p or not q:
            return False
        # 左右都有val的情况
        return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.rihgt)
  • 101 镜像树
  1. 镜像的条件是左孩子的值和右孩子的值相等,且左孩子的左孩子和右孩子的右孩子镜像,且左孩子的右孩子和右孩子的左孩子镜像。
  2. 退出条件为左孩子或者右孩子至少有一个为None
  3. 构造一个辅助函数,传参为左子树和右子树。
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root:
            return True
        return self.isSymmetricHelper(root.left, root.right)

    def isSymmetricHelper(self, left, right):
        # 左右两棵树都为None的情况
        if not left and not right:
            return True
        # 左右两棵树有一个为None的情况
        if not left or not right:
            return False
        # 左右两棵树都不为None的情况
        return left.val == right.val and self.isSymmetricHelper(left.left, right.right) and self.isSymmetricHelper(left.right, right.left)
  • 572 树的子结构
    写一个compare的辅助函数,compare要求两棵树完全一致,不能有多余的结点。例如[1,2,3]和[1,2]不一致。compare本身也是递归函数。
    判断子结构的函数是递归函数,通用判断条件为s和t一致,或者s的孩子和t一致。
    def isSubtree(self, s, t):
        """
        :type s: TreeNode
        :type t: TreeNode
        :rtype: bool
        """
        if not s and not t:
            return True
        if not s or not t:
            return False
        return self.compare(s,t) or self.isSubtree(s.left,t) or self.isSubtree(s.right,t)

    def compare(self, s, t):
        if not s and not t:
            return True
        if not s or not t:
            return False
        return s.val == t.val and self.compare(s.left, t.left) and self.compare(s.right, t.right)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 更多精彩内容,请关注【力扣简单题】。 树是一种重要的数据结构,而二叉树是其中的重点和难点,有关二叉树的基础知识,读...
    玖月晴阅读 7,787评论 2 2
  • 1. AVL树 AVL树简单来说是带有平衡条件的二叉查找树.传统来说是其每个节点的左子树和右子树的高度最多差1(注...
    fredal阅读 5,814评论 0 4
  • 树的定义与基本术语   树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,是以分支关系定义的层次结构。...
    java技术分享师阅读 4,847评论 0 1
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 11,607评论 0 14
  • 栈,队列,双端队列无序链表,有序链表二叉树,堆,二叉搜索树,AVL树图以及一些算法 coding: utf-8 u...
    hugoren阅读 3,808评论 0 0

友情链接更多精彩内容