【20221031】【二叉树第二次小结】【20221104】【二叉树第三次小结】

左叶子之和:左叶子的判定需要不光是对本节点进行操作判断,只有当遍历到父节点的时候,才能对其下面的左右孩子进行判断是否为左叶子;很明显是左右中的顺序。

找树左下角的值:还是最熟悉的层序遍历,记录每一层的左边的值,实现的话在每一层遍历的时候只需要从右边开始遍历即可,这样每层最后留下来的就是最左边的。

路径总和:和所有路径做法类似,中左右的前序遍历,注意这里的遍历终止条件:找到叶子节点时停下,并且把一路记在path里的数求和,用accumulate(),这个库函数在使用时需要赋它初值,即第三个参数0;另外这里的中写在了终止条件的前面,是因为不这样的话,最后面一个叶子节点就会漏掉了;我选择的查询用的是哈希表,unordered_map,查询效率还是比较快的。

从中序与前序遍历序列构造二叉树:前序的第一个元素为中,以此为基准进行切割,先对中序,再对前序。注意这里的vector容器的构造。(中序与后序同理)

最大二叉树:整体的思路与上一题类似,首先剪枝,就是只有一个元素的情况,再找出数组中的最大值及其下标;接下来得排除左边数组为空,以及右边数组为空的情况,左右中后序遍历。

一般情况来说:如果让空节点(空指针)进入递归,就不加if,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整。


【20221104】二叉树第三次小结

合并二叉树:罗列出所有情况,用root->left,root->right去接收。前序遍历

二叉搜索树中的搜索:这次用了开销很大的方法,开了一个数组去存二叉搜索树。

验证二叉搜索树:还是开数组,去验证这个数组是否严格升序。内存消耗还是很大的;

还是用双指针法好,定义一个pre节点指针,在遍历的过程中直接去比较。

二叉搜索树的最小绝对差:开数组去做差分。内存消耗还是很大的;得走出舒适圈了,不能再用这个办法了!!!就用双指针去做!!不要忘记pre的更新

二叉搜索树中的众数:定义一个count与Maxcount实时更新result数组,将逻辑写清即可。

二叉树的最近公共祖先:后序遍历,左右中,确定单层逻辑,找到p或者q就返回当前节点,找不到就返回NULL。root==p||root==q其实包含了如果q不在p下面的情况。

你可能感兴趣的:(Leetcode刷题,算法,数据结构,leetcode,c++,vscode)