01.平衡二叉树
思路:使用递归,因为是比较高度,所以使用后序遍历。在递归中明确单层的逻辑:分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。
function isBalanced(root: TreeNode | null): boolean {
function getDepth (node:TreeNode | null) {
if (!node) return 0
let leftDepth:number = getDepth(node.left)
if (leftDepth === -1) return -1
let rightDepth:number = getDepth(node.right)
if (rightDepth === -1) return -1
if (Math.abs(leftDepth - rightDepth) > 1) return -1
return 1 + Math.max(leftDepth, rightDepth)
}
return getDepth(root) !== -1
};
02.二叉树的所有路径
思路:使用递归 + 回溯。使用回溯是因为一个结点有可能左右节点都存在,所以需要使用回溯记录同一节点的不同路径
function binaryTreePaths(root: TreeNode | null): string[] {
function traversal (node: TreeNode, path:string, res:string[]) {
path += String(node.val)
console.log(path)
if (!node.left && !node.right) {
res.push(path)
return res
}
if(node.left) traversal(node.left, path + '->', res)
if(node.right) traversal(node.right, path + '->', res)
}
let ans:string[] = []
traversal(root, '', ans)
return ans
};