【JS】112. 路径总和

112. 路径总和

代码

DFS

var hasPathSum = function(root, targetSum) {
    //找到没有根了,那么就说明这条路行不通
    if(!root){
        return false;
    }

    //既没有左节点,也没有右节点,则是叶子节点
    if(!root.left && !root.right){
        return root.val === targetSum; 
    }

    //递归
    return hasPathSum(root.left,targetSum-root.val) || hasPathSum(root.right,targetSum-root.val)
};

复杂度分析:

  • 时间复杂度:\(O(N)\),N是节点数
  • 空间复杂度:\(O(T)\),T是树节点的高度

BFS

队列1则保存节点
队列2用来存放节点到根节点的路径和

var hasPathSum = function(root, targetSum) {
    //过了叶子节点的情况,就是找不到符合的路径
    if(root == null){
        return false;
    }

    var queue1 = [root];
    var queue2 = [root.val];
    //当有节点可以继续拿来用时
    while(queue1.length !== 0){
        //出队列
        var node = queue1.shift();
        var rootVal=queue2.shift();
        //找到叶子节点,并且也符合目标值的情况
        if(node.left == null && node.right == null && rootVal == targetSum){
            return true;
        }
        //继续遍历左节点
        if(node.left){
            //记录往了左节点
            queue1.push(node.left);
            //记录走了后的值为多少
            queue2.push(node.left.val+rootVal);
        }
        //继续遍历右节点
        if(node.right){
            queue1.push(node.right);
            queue2.push(node.right.val+rootVal);
        }
    }
    return false;
};

复杂度分析:

  • 时间复杂度:\(O(N)\),N是节点数
  • 空间复杂度:\(O(N)\),N是树节点的节点数
posted @ 2022-09-04 23:53  帕图纳克斯  阅读(69)  评论(0编辑  收藏  举报