刷题Day12

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
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值