LeetCode - 路徑總和

題目鏈接:https://leetcode-cn.com/problems/path-sum/

題目描述

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

說明: 葉子節點是指沒有子節點的節點。

示例:
給定如下二叉樹,以及目標和 sum = 22,

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

我的思路

  • 之前做過,又做一次卡了半個小時,好蠢,我的大腦不適合做遞歸運算;(之前做過沒發博,就說明之前都覺得太簡單沒發,看來是退步了)
  • 剛開始一直往下遞歸,走完一層就將 sum 值減去當前節點值,直到走到葉子節點,判斷葉子節點的值是否等於 sum(sum已經依次和前面的父節點相減了);
  • 如果等於,葉子節點處返回 true,否則返回 false。由於只要有一條路徑滿足就返回 true,因此返回的邏輯應該是 或 ;
  • 我的大腦需要一個額外隊列,目前只有一個隊列,,,我需要額外的隊列來生成一個棧,,,

代碼如下:

/**
 * Definition for a binary tree node.
 * 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(sum == root->val && root->left == NULL && root->right == NULL){	//判斷葉子節點
            return true;
        }

        return hasPathSum(root->left, sum-root->val) || hasPathSum(root->right, sum-root->val);	//或操作
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章