236. 二叉树的最近公共祖先

  1. var lowestCommonAncestor = function(root, p, q) {
  2. let ans;
  3. const dfs = (root, p, q) => {
  4. if (root === null) return false;
  5. const lson = dfs(root.left, p, q);
  6. const rson = dfs(root.right, p, q);
  7. // 这个为什么是 || 关系
  8. if ((lson && rson) || ((root.val === p.val || root.val === q.val) && (lson || rson))) {
  9. ans = root;
  10. }
  11. return lson || rson || (root.val === p.val || root.val === q.val);
  12. }
  13. dfs(root, p, q);
  14. return ans;
  15. };

104. 二叉树的最大深度

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @return {number}
  12. */
  13. var maxDepth = function(root) {
  14. var dfs = (root) => {
  15. if (!root) {
  16. return 0
  17. }
  18. return 1 + Math.max(dfs(root.left), dfs(root.right))
  19. }
  20. return dfs(root)
  21. };

77. 组合

  1. var combine = function(n, k) {
  2. const ans = [];
  3. const dfs = (cur, n, k, temp) => {
  4. // 剪枝:temp 长度加上区间 [cur, n] 的长度小于 k,不可能构造出长度为 k 的 temp
  5. if (temp.length + (n - cur + 1) < k) {
  6. return;
  7. }
  8. // 记录合法的答案
  9. if (temp.length == k) {
  10. ans.push(temp);
  11. return;
  12. }
  13. // 考虑选择当前位置
  14. dfs(cur + 1, n, k, [...temp, cur]);
  15. // 考虑不选择当前位置
  16. dfs(cur + 1, n, k, temp);
  17. }
  18. dfs(1, n, k, []);
  19. return ans;
  20. };

1049. 最后一块石头的重量 II

71. 简化路径

  1. var simplifyPath = function(path) {
  2. const names = path.split("/");
  3. const stack = [];
  4. for (const name of names) {
  5. if (name === "..") {
  6. if (stack.length) {
  7. stack.pop();
  8. }
  9. } else if (name.length && name !== ".") {
  10. stack.push(name);
  11. }
  12. }
  13. return "/" + stack.join("/");
  14. };