摘要:563. 二叉树的坡度 二叉树大部分题目都可以用递归解决。为了满足一般性,即使题目初试没有的情况,子问题有的,也要考虑。 递归就考虑当前的情况就行了,不要再考虑上一层或者下一层。 下面这个做法是把计算值和、计算坡度分开,时间复杂度n^2,一开始做的时候就一直在想n的情况,就没有写出来。 class
阅读全文
摘要:814. 二叉树剪枝 有一点疑问,为什么不能先 if(!root->left&&!root->right&&root->val==0) return nullptr; ? class Solution { public: TreeNode* pruneTree(TreeNode* root) { i
阅读全文
摘要:680. 验证回文串 II 这个做法就是利用双指针。一个指向第一个字符,一个指向最后一个字符。遇到两个指针指向的字符相同时,一个往前走,一个往后走。 如果遇到不相同,那么就看看是否 s[i+1]==s[j] 或者 s[i]==s[j-1] 。如果是则i+=2或者j-=2,并把标记改为false。 但
阅读全文
摘要:96. 不同的二叉搜索树 首先,二叉搜索树的基本性质:对于某个结点,若有左孩子,那么它的左孩子比它小。若有右孩子,那么右孩子比它大。 这里的dp[n]数组表示从1,...,n可以构成多少个二叉搜索树。 sum+=(dp[j]*dp[i-j-1]),以求解dp[10]为例 表示 顶点左边0个结点,右边
阅读全文
摘要:343. 整数拆分 这道题的关键点在于下面这两个式子。比如要计算dp【10】,就逐个比较1*dp【9】,2*dp【8】,3*dp【7】,还有1*9,2*8,3*7,才考虑了所有的情况 如果使用 dp[i]=max(dp[i],dp[j]*(i-j)); dp[i]=max(dp[i],j*(i-j)
阅读全文
摘要:404. 左叶子之和 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nu
阅读全文
摘要:257. 二叉树的所有路径 泪目,自己写出的递归遍历. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode()
阅读全文
摘要:110. 平衡二叉树 这道题很容易联想到 104. 二叉树的最大深度 的做法。一开始做的时候就知道可以用递归,但是又想到了左右子树的高度相差不大于1,但是子树的子树相差大于1的情况,就开始往这方面多想了。 看了别人的题解才知道,左右子树相差大于1确实可以直接判断为false。 至于子树的子树的情况就
阅读全文
摘要:222. 完全二叉树的节点个数 这道题如果要最快,就要充分利用完全二叉树的性质。甚至还有二分查找法,还没怎么认真看 利用树的深度判断是否为完全二叉树。若是,直接公式得出节点数。 class Solution { public: int countNodes(TreeNode* root) { if(
阅读全文
摘要:101. 对称二叉树 首先是自己写的BFS /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(
阅读全文
摘要:111. 二叉树的最小深度 这道题相比 104. 二叉树的最大深度 还是难上一些的,但也不算太难。 BFS /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tree
阅读全文