0二叉樹簡單 牛客NC9.

董明明-2021年秋招發表於2020-11-11

二叉樹中是否存在節點和為指定值的路徑

題目描述

給定一個二叉樹和一個值sum,判斷是否有從根節點到葉子節點的節點值之和等於sum的路徑,
例如:
給出如下的二叉樹,sum=22

思路

判斷從根節點到葉子節點的節點值之和是否等於sum的路徑,每次遞迴前都將sum值減去當前結點值,當結點=是葉子節點且值等於sum時,即滿足條件返回true。只要左右子樹有一個是true,則返回true。

示例:

public class Solution {
    public boolean hasPathSum (TreeNode root, int sum) {
        if(root == null){
            return false;
        }
        if(root.left == null && root.right == null && sum == root.val){
            return true;
        }

        boolean l = hasPathSum(root.left,sum-root.val);
        boolean r = hasPathSum(root.right,sum-root.val);
        return l || r;
    }
}

下面的通過率只有5%,不懂為什麼?資料自測沒問題,自己在ide上除錯也沒發現問題。

    public boolean hasPathSum (TreeNode root, int sum) {
        // write code here
        if(root == null && sum == 0){//當結點為空(即父節點是葉子節點)且sum為0即滿足條件,這想法沒錯啊。
            return true;
        }
        if(root == null){
            return false;
        }
        boolean l = hasPathSum(root.left,sum-root.val);
        boolean r = hasPathSum(root.right,sum-root.val);
        return l || r;
    }

相關文章