二叉树的最近公共祖先

let tree = {
      val: 3,
      left: {
        val: 5,
        left: {
          val: 6,
        },
        right: {
          val: 2,
          left: {
            val: 7
          },
          right: {
            val: 4
          }
        }
      },
      right: {
        val: 1,
        left: {
          val: 0
        },
        right: {
          val: 8
        }
      }
    }
    let ans = this.lowestCommonAncestor(tree, {
      val: 2
    }, {
      val: 5
    })
    console.log(ans)
lowestCommonAncestor(root, p, q) {
    let ans;
    const dfs = (root, p, q) => {
      // 没有子节点,肯定是false
      if (root == null) return false;
      // 是不是左子节点
      const lson = dfs(root.left, p, q);
      // 是不是右子节点
      const rson = dfs(root.right, p, q);
      // 是左子节点 且是右子节点 或者是自己本身且是左子节点或者右子节点
      if ((lson && rson) || ((root.val === p.val || root.val === q.val) && (lson || rson))) {
        ans = root;
      }
      // 是子节点或者是数据本身
      let v = lson || rson || (root.val === p.val || root.val === q.val)
      return v;
    }
    dfs(root, p, q);
    return ans;
  },

你可能感兴趣的:(二叉树的最近公共祖先)