代码随想录第十七天 110.平衡二叉树 、 257. 二叉树的所有路径 、 404.左叶子之和

这是练习二叉树部分第四天的内容

10.平衡二叉树 

题目链接:. - 力扣(LeetCode)

思路:用递归明确三要素1)参数值为当前节点 2)递归的终止条件为a.当前节点为空则返回null b.如果左右子树之差大于1,则返回-1,如果返回值是-1,则终止递归 3)单层递归的逻辑:分别求出左右子树的高度,如果>1则返回-1,如果<1则返回当前最大高度;

代码实现如下

var isBalanced = function (root) {
  const getHeight = (node) => {
    if (!node) return 0;
    let leftHeight = getHeight(node.left);
    if(leftHeight === -1) return -1
    let rightHeight = getHeight(node.right);
    if(rightHeight === -1) return -1
    if (Math.abs(leftHeight - rightHeight) > 1) {
      return -1;
    }
    return 1 + Math.max(leftHeight, rightHeight);
  };
  return getHeight(root) === -1 ? false : true;
};

257. 二叉树的所有路径

题目链接:力扣题目链接

思路:依旧还是用递归,这道题涉及了回溯,在代码中体现:

var binaryTreePaths = function (root) {
    let res = [];

    const getPath = (node, curPath) => {
        // 递归的终止条件,如果当前节点没有左右子节点,那么说明他是叶子节点
        if (!node.left && !node.right) {
            curPath = curPath + node.val;
            res.push(curPath);
            return;
        }
        // 确认单层逻辑
        curPath = curPath + node.val + "->";
        node.left && getPath(node.left, curPath);
        // 将之前的curPath传入,是一个回溯的过程
        node.right && getPath(node.right, curPath);
    };
    getPath(root, '')
    return res;

};

404.左叶子之和 

题目链接:. - 力扣(LeetCode)

思路:还是用递归去解决,这里要注意终止条件是node为空的时候

var sumOfLeftLeaves = function (root) {
    let sum = 0;

    const getSum = (node) => {
        if (!node) return;
        if (node.left && !node.left.left && !node.left.right) {
            sum = sum + node.left.val;
        }
        node.left && getSum(node.left);
        node.right && getSum(node.right);
    };

    getSum(root);
    return sum;
};

卡哥的思路:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值