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.套路一样 框架会了就会了