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-18 09:26
已编辑
门头沟学院 Java
王桑的大offer:建议中间件那块写熟悉即可,写掌握 面试包被拷打到昏厥
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务