公共祖先和路径两种类型写在一起
235. 二叉搜索树的最近公共祖先
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function(root, p, q) {
if (!root) return null;
const dfs = (node) => {
if (node == null) return null;
if (node.val == p.val || node.val == q.val) {
return node;
}
const left = dfs(node.left);
const right = dfs(node.right);
if (left && right) {
return node;
}
if (left == null) {
return right;
}
return left;
}
return dfs(root);
};
236. 二叉树的最近公共祖先
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function(root, p, q) {
if(root == null) return null;
const dfs = (node) => {
if (node == null) return null;
if (node == p || node == q) {
return node;
}
let left = dfs(node.left);
let right = dfs(node.right);
if (left && right) {
return node;
}
if(left == null) {
return right;
}
return left;
};
return dfs(root);
};
129. 求根节点到叶节点数字之和
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var sumNumbers = function(root) {
if (root == null) return 0;
let path = [];
const DFS = (node, sum) => {
if (node == null) return;
if (node.left == null && node.right == null) {
sum = sum * 10 + node.val;
path.push(sum);
}
sum = sum * 10 + node.val;
node.left && DFS(node.left, sum);
node.right && DFS(node.right, sum);
}
DFS(root, 0);
return path.reduce((prev, next) => {
return prev+next;
}, 0);
};
257. 二叉树的所有路径
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {string[]}
*/
var binaryTreePaths = function(root) {
if (root == null) return [];
let res = [];
const DFS = (node, arr) => {
if (!node) return;
arr.push(node.val);
if (node.left == null && node.right == null) {
let str = arr.join('->');
res.push(str);
}
node.left && DFS(node.left, arr);
node.right && DFS(node.right, arr);
arr.pop();
}
DFS(root, []);
return res;
};