第三题:
解题思路:这题看了不会动手了,看了解析都看了很久,后来看了代码,慢慢懂了,后续遍历的回溯思想。需要多想想呀。
var lowestCommonAncestor = function(root, p, q) {
// 使用递归的方法
// 需要从下到上,所以使用后序遍历
// 1. 确定递归的函数
const traversal = function(root, p, q) {
// 2. 确定递归终止条件
if (root === null) return null
if (root === p || root === q) return root
// 3. 确定递归单层逻辑
let left = traversal(root.left, p, q)
let right = traversal(root.right, p, q)
if (left === null && right === null) { // 左右子树都没有找到p和q
return null
} else if (left === null && right !== null) { // 左子树没找到p和q,右子树找到p和q
return right
} else if (left !== null && right === null) { // 左子树找到p和q,右子树没找到p和q
return left
} else { // 左子树和右子树分别找到p或者q
return root
}
}
return traversal(root, p, q)
};