39. 组合总和 同一个下标可以被多次选择,dfs 的 for 循环下标从当前开始。 class Solution { public: // 多个 // ==0加入 <0终止 >0继续 // dfs的循环很妙 vector<int> candidates; vector<vector<int>> re…
板子是主循环啥也不干,只指明下标,dfs里面两种情况,选或不选。 216. 组合总和 III class Solution { public: vector<vector<int>> res; int n, k; vector<vector<int>> combinationSum3(int k_, …
77. 组合 每个点选或不选 得到第一种写法,效率比较低 class Solution { public: // 1~n 选k个 int n, k; vector<vector<int>> res; vector<bool> b; vector<vector<int>> combine(i…
669. 修剪二叉搜索树 如果节点的某一边不和条件,返回另一边 class Solution { public: // 如果<val 返回右边的 TreeNode* trimBST(TreeNode* root, int low, int high) { if (root == nullptr) return nullptr; if (roo…
235. 二叉搜索树的最近公共祖先 和昨天的一题很像,两种做法 1、dfs class Solution { public: // dfs版 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (root == nullptr || root =…
530. 二叉搜索树的最小绝对差 就中序遍历算了,简洁易懂 class Solution { public: vector<int> nums; // 比较的时候只用比较连着的 int getMinimumDifference(TreeNode* root) { dfs(root); int minn = nums[1] - nums[…
654. 最大二叉树 最大值是根节点,找到根节点后递归构建 class Solution { public: TreeNode* constructMaximumBinaryTree(vector<int>& nums) { return dfs(nums, 0, nums.size()); // 左闭右开 } TreeNode…
513. 找树左下角的值 巧妙地切换了下bfs的入队顺序 class Solution { public: // bfs int findBottomLeftValue(TreeNode* root) { int res; queue<TreeNode*> q; q.push(root); while (q.size()) { int …
110平衡二叉树难度最大 剩下的两个就是朴素dfs 110. 平衡二叉树 不和条件返回-1。不然返回最大高度 class Solution { public: // 不和条件了就是-1 bool isBalanced(TreeNode* root) { return getHeight(root, 0) != -1; } int getHeight…
104. 二叉树的最大深度 class Solution { public: int maxn = 0; int maxDepth(TreeNode* root) { dfs(root, 0); return maxn; } void dfs(TreeNode* root, int depth) { if (root == nullptr) { m…