代码随想录算法训练营第十八天| 513.找左下角值112. 路径总和113.路径总和ii236. 二叉树的最近公共祖先106.从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树

513. level traverse 就行,时间久了容易忘,这周日好好复习

112. 

经典回溯

不需要纠结前中后序因为中节点不处理(?)

前中后序和回溯是什么关系?只要dfs就是回溯吗(?)

  • 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是本文下半部分介绍的113.路径总和ii)
  • 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。 (这种情况我们在236. 二叉树的最近 (opens new window)公共祖先236. 二叉树的最近 (opens new window)中介绍)
  • 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(本题的情况)

113. 

这道题值得思考的是是否需要返回值,我们并不需要处理任何递归回来的东西,所以void就行

236.

首先要能想到最近公共祖先就是左子树里有p且右子树里有q的那个treenode

首先返回值不能是void,因为要确定子树回溯出来有没有p/q。其次不能是bool,因为最近公共祖先会通过收到left和right回溯出来都是true而被找出来,而找到了还是要返回true。很难记录第三个true是哪个node。可以,但是会很难看。

答案的方法很简洁,终止条件里只会return p/q/NULL,处理本层逻辑里并不纠结谁满足了p谁满足了q,只要不是null,那么就返回不是null的东西,如果两边都不是null,直接返回root,如果一边有null,就返回非null的一边。

106.

注意切割vector的写法,直接用两个pointer就能确定出来一个新的vector。

.end() 可以直接 -1,直接就是最后一个元素

注意new的写法。

 105.套路一样 框架会了就会了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值