Leetcode104:Maximum Depth of Binary Tree
二叉树最大深度
解题思路:用递归式最直接的
Leetcode110:Balanced Binary Tree
解题思路:还是递归
Leetcode543,Leetcode226,Leetcode617
路径总和I,II,III
Leetcode112:路径总和
仍然递归
Leetcode113: 路径总和 II
这题和上一道题很像,增加一个记录的逻辑就可以了
ps: 一个列表a a.append()是在原列表上添加元素,不创建新列表,tmp = a.append()的话,tmp是None
创建新列表的方式:tmp = a+[新元素]
Leetcode437:路径总和 III
为了看懂这道,先去做数组情况下的这道题————》
Leetcode560:和为K的子数组
这题用了哈希表(key value字典)
Leetcode572:另一个树的子树
双递归
Leetcode101:对称二叉树
递归方法很直接
Leetcode687:最长同值路径
如果不知道怎么做了请看Leetcode543,看完就知道了
Leetcode111:二叉树的最小深度
真的简单
Letcode404:左叶子之和
递归大法好
Leetcode337:打家劫舍 III
这题有点儿难度。动态规划。暴力递归————>记忆化+暴力递归————>优雅解法
Leetcode671:二叉树中第二小的节点
递归
深度优先、广度优先:
深度优先一般是递归,广度优先一般用一个队列存储树节点
Leetcode637:二叉树的层平均值
这题DFS\BFS都可以
Leetcode513:找树左下角的值
这题DFS\BFS都可以,自己感觉BFS更直接
***Leetcode144\145\94:二叉树的前序、后序、中序遍历(迭代方法)
这几道题有点儿脑筋急转弯的感觉,属于硬做做不出来,但是答案及其简介的类型,先理解递归的方法这三种分别是怎么遍历节点的,然后用迭代去模仿;前序和后序的迭代写法很像,合在一看别有一番意思;
BST(二叉查找树(Binary Search Tree)
(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
Leetcode669:修剪二叉搜索树
十分简单,get到啥是BST后递归一遍过
Leetcode230:二叉搜索树中第K小的元素
递归和迭代都可以,迭代更省时间
Leetcode538:把二叉搜索树转换为累加树
递归和迭代都可以,有个莫里斯更省空间但是我没看。。。。。
Leetcode235:二叉搜索树的最近公共祖先 Leetcode236:二叉树的最近公共祖先
居然是先把普遍情况的给做出来了。。。。。也就是236.递归就行,写了一个helper function来递归,helper function返回的是p和q是否在以这个根节点为树的树里面
二叉搜索树要判断p和q是否在一棵树的右子树还是左子树只需要进行值的比较,因为右子树都比根节点的值要大,左子树都比根节点的值要少
Leetcode108:将有序数组转换为二叉搜索树
递归
Leetcode109:有序链表转换二叉搜索树
这题和上题思路一样,链表使用快慢指针即可找到中间点。
Leetcode653:两数之和 IV - 输入 BST
两数值和进阶版,可以用中序遍历把树记录到一个list里面
还有两道Trie的题,挺有意思的
好的,树的刷完了