栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode 刷题第一周总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 刷题第一周总结

先来看看第一周都刷了哪些题目吧!然后再来总结一下刷题

236. Lowest Common Ancestor of a Binary Tree

1644.Lowest Common Ancestor of a Binary Tree II

1650.Lowest Common Ancestor of a Binary Tree III

1676 Lowest Common Ancestor of a Binary Tree IV

235.  Lowest Common Ancestor of a Binary Search Tree

2096. Step-By-Step Directions From a Binary Tree Node to Another

1257. Smallest Common Region

257. Binary Tree Paths

1740. Find Distance in a Binary Tree

113.  Path Sum II

Maximum Average Subtree

1973 Count Nodes Equal to Sum of Descendants

508. Most Frequent Subtree Sum

572 Subtree of Another Tree

100. Same Tree

250 Count Univalue Subtrees

1. Two Sum

大部分的题目都是关于Binary Tree。

因为跟着九章算法的视频刷题,先学的就是树。

关于binary tree,一般的想法就是divide and conquer.

1 divide : 先把问题分解,二叉树就能把整个问题分解为先去处理左子树的相同问题。

然后处理右子树的相同问题。

2. conquer:把左右子树处理的结果进行合并处理。

比如lower common ancestor 的问题。

一. 这个就是典型的divide and conquer 解法。

     公共最小祖先,得给出两个树种的两个节点。

     1. divide:
                先去找左子树中是否有这两个节点,然后去找右子树中是否有这两个节点。 

                如果找到这个节点,就返回这个节点。

     2. conquer:
                合并的时候就会有三种情况。

                1. 当前root的左右子树都找到了要找的子孙节点,那最小祖先就是当前访问的root。

                    相当于两个富豪要认祖归宗。某个名人比如秦桧的两个儿子,左儿子和右儿子分别得到消息自己的儿子分别是富豪A和富豪B。 那么两个富豪的最小祖宗就是秦桧了。

                2. 左子树为空或者右子树为空。

                    这个问题得稍微考虑多一些。比如要找的这两个富豪,是不是在这个树中。

                    a) 这两个富豪肯定都是这个树的节点。

                          俩孙子都带着族谱,就差DNA检测报告了。 

                         从根往叶子递归调用的过程中。如果有一个路径上找到了一个富豪名字,并且其他的路径上都没有找到另外一个富豪名字。那肯定能说明这个富豪是另外一个富豪的最小祖宗了。

                    b) 这两个富豪都没有族谱,就不确定要找的这两个node在不在树中。

                         这样就得遍历全部的node了,并且从叶子开始往根查。

                         比如查到某个节点是富豪一的名字,记录下找到的富豪数目,account = 1;

                         i)然后继续再往根找。如果找到了另外一个富豪的名字,并且这个富豪的兄弟沈万一没有一个子孙名字是要找的富豪名字。 那就能断定富豪沈万三就是另外一个富豪的祖宗。

                         ii) 继续往根上找,没有找到第二个富豪的名字。也就是说整棵树上就找到一个富豪。那这两个富豪没有公共祖先。

  二。

          第二种解法就是找根到两个要找的节点的路径,然后记录下来。

           比如ABCDE 和ABCDF 是两个root->target node的路径。

           那前面相同的ABCD都是EF的祖先,最小祖先就是D了。

           这个解法适合树中的数据结构有parent指针的情况,或者求两个node之间的最短path。

具体分析几个典型的例子:

1650. Lowest Common Ancestor of a Binary Tree III

该题目提供了parent 指针,那就能按照解法二找到node到root的路径,然后排除掉相同的node。就能找到最小的祖先了。

但是该题目提供了另外一种解法,运用数学知识来处理问题。

寻找6,4的公共祖先, 6到root经过的路径L1,再加上4到5的路径L2 和4到root再加上6到LCA的路径长度一样。

问题就转化为

    指向6的指针先走到root,然后再从4 走。

    指向4的指针先走到root,然后再从6走。

    走到最后两个指针肯定会重逢。那就找到了LCA节点。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716698.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号