[Leetcode] 48. Path Sum

題目

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22,

          5
         / \
        4   8
       /   / \
      11  13  4
     /  \      \
    7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

解題之法

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool hasPathSum(TreeNode *root, int sum) {
        if (root == NULL) return false;
        if (root->left == NULL && root->right == NULL && root->val == sum ) return true;
        return hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val);
    }
};

分析

這道求二叉樹的路徑需要用深度優(yōu)先算法DFS的思想來遍歷每一條完整的路徑,也就是利用遞歸不停找子節(jié)點的左右子節(jié)點,而調(diào)用遞歸函數(shù)的參數(shù)只有當前節(jié)點和sum值。
首先,如果輸入的是一個空節(jié)點,則直接返回false;如果如果輸入的只有一個根節(jié)點,則比較當前根節(jié)點的值和參數(shù)sum值是否相同,若相同,返回true,否則false。
這個條件也是遞歸的終止條件。
下面我們就要開始遞歸了,由于函數(shù)的返回值是Ture/False,我們可以同時兩個方向一起遞歸,中間用或||連接,只要有一個是True,整個結果就是True。遞歸左右節(jié)點時,這時候的sum值應該是原sum值減去當前節(jié)點的值。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,923評論 0 33
  • 目錄 簡書的 markdown 都不支持 [TOC] 語法……我就不貼目錄了。下面按照類別,列出了29道關于二叉樹...
    被稱為L的男人閱讀 3,447評論 0 8
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 《我看著這雙手》 拇指間的老繭 尚未褪盡 青色的血管 潛伏在黝黑的手臂 寂靜得像地下的河流 曾經(jīng),我用這雙手 ...
    Flatteur閱讀 296評論 7 10
  • 很多人說,為什么我老是做這樣的事情!覺得自己浪費了時間,覺得自己把精力花在了不該花的地方上面。 有時候...
    孤獨是孤獨者的盛裝閱讀 273評論 0 0

友情鏈接更多精彩內(nèi)容