知识点
LeetCode算法
LeetCode算法
199.【二叉树的右视图】
解题思路:
BFS解题即可。
104.【二叉树的最大深度】
解题思路:
DFS或者BFS解题。
101.【对称二叉树】
解题思路:
确定好递归函数的定义即可。
96.【不同的二叉搜索树】
解题思路:
首先,为了构建出一棵二叉搜索树,我们可以遍历每个数字 k,将该数字作为树根,将[1..k-1]序列作为左子树,将 [k+1..n]序列作为右子树。
左子树出来的形态有 a 种,右子树出来的形态有 b 种,则整个树的形态有 a * b 种,因此以 k 为根节点的 BST 种类数 = 左子树 BST 种类数 * 右子树 BST 种类数。
因此,就是遍历每个数字 k的左子树 BST 种类数 * 右子树 BST 种类数的累加。
因为子问题独立,并且有重叠子问题,因此使用动态规划完成。
首先定义dp数组,dp[i] :用连着的 i 个数,所构建出的 BST 种类数
其次,确定base case。当只有0个节点时,BST种类数为1,即[];当只有1个节点,BST种类数为1个,即单个节点。
最后,确定状态转移方程:dp[k] = dp[k - 1] * dp[n - k]