8/18二叉树的总结

二叉树的遍历方式:

递归前中后序144,145,94

二叉树:前中后序递归法 (opens new window)

迭代法通过队列模拟102

求二叉树的属性

101是否对称,左数的外侧和右数的外侧比较,左树的内侧和右树的内侧比较

104最大深度,DFS比较左数的最大深度和右树的最大深度,二者取较大者

111二叉树最小深度,后序遍历,处理节点

222二叉树节点个数,这道题跟104一样做法

110.平衡二叉树, 判断左右子树高度差

404.左叶子之和,必须三层约束条件,才能判断是否是左叶子。

257.二叉树所有路径,递归+回溯,或者纯递归,

513.找树左下角的值,用层序遍历

112路径总和

二叉树的修改与构造

226.翻转二叉树

     * 前后序遍历都可以但中序不行,因为先左孩子交换孩子,再根交换孩子(做完后,右孩子已经变成了原来的左孩子),再右孩子交换孩子(此时其实是对原来的左孩子做交换)

106.中序与后序遍历构造二叉树

如通过中序与后序,首先找到后序数组最后一个数组为分割点,再以此分割点分割中序数组,这样反复循环

654.构造最大二叉树

同理106,要遍历出最大的数字,然后以此为分割点,做区间分割

617.合并二叉树

以其中一棵为主树,把另一颗树的数值加到主树上去

求二叉搜索树的属性

700.二叉搜索树中的搜索,寻找符合条件的目标节点,利用BST的特性,判断往左走还是往右走。

98.验证二叉搜索树,递归中序遍历,这道题不需要遍历全树,需要有一个前节点pre记录值,将其值和当前节点cur的值进行比较

530.二叉搜索树的最小绝对差,也是需要一个pre节点,每次计算当前节点root和pre节点的差值

501.二叉搜索树的众数,递归+中序遍历,maxCount句记录最大频数,如果发现更大频数,要更新maxCount,同时把新的rootValue添加到结果集中,这道题要注意可能有多个相等的众数

538. 把二叉搜索树转换为累加树,反中序遍历,需要一个前节点pre。pre节点可以理解为当前节点root的孩子节点

二叉搜索树的修改与构造

701. 二叉搜索树中的插入操作,注意BST的有序性

450. 删除二叉搜索树中的节点,当root.val==val的时候,删除节点分为多个情况,root左子树不为空,右子树为空;root右子树不为空,左子树为空;root的左右子树都不为空,把root左子树嫁接到root右子树的最底层的最左边

669. 修剪二叉搜索树,删除不在指定区间的节点,dfs前序遍历,如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点

108. 将有序数组转换为二叉搜索树,我们应该找到数组的中点,重点作为root节点,然后 递归构建root的左子树和右子树

二叉树公共祖先问题

236. 二叉树的最近公共祖先,递归后序遍历,1.递归当前节点的左子树和右子树,2.处理递归逻辑,判断在递归过程中是否存在left或者right为null,这个时候说明递归到头了,要return

235. 二叉搜索树的最近公共祖先,236的代码可以copy过来,但是为了利用BST的特性,我们优化:将root.val分别于p.val和q.val进行比较,然后根据递归结果决定是递归左子树还是右子树

你可能感兴趣的:(算法训练营,算法)