day18| 二叉树

三道题目 众数,最小差和公共祖先。

众数和最小差的逻辑类似,都是利用 BFS 的中序遍历是有序的,因此在遍历过程中可以利用有序的特性减少复杂度。

以最小差为例

      # 二叉树 中序是有序的  我们在中序查找每个最小差值即可
        while cur or stack:
            while cur:
                stack.append(cur)
                cur=cur.left
            cur = stack.pop()
            if pre:
                mindiff = min(abs(pre.val-cur.val),mindiff)
            pre = cur
            cur = cur.right
        return mindiff

公共祖先则是要数清楚祖先的情况,

  • p,q分别在左右子树,需要向上返回cur
  • p,q在一边子树,此时只用返回最上面的那层节点。

整体的逻辑就是 当我们的 cur 遍历到p和 q 时直接向上返回(因为必然在 cur 为根,且 cur 为p或 q的树的下面)

如果cur左右子树是发现左右存在p和 q,则返回 cur

如果只发现一个 p ,则直接返回 p (相当于把 cur 给替代了,他们公共祖先的情况是一致的)

全部评论

相关推荐

今天 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务