国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

leetcode-112-Path Sum

2019-11-11 02:48:54
字體:
來源:轉載
供稿:網友

問題

題目:[Path Sum]

思路

下面的代碼并不是原始問題的代碼。而是改良后的問題。即求一條路徑和為sum。要求必須從根開始,但是不一定到葉子結束。 下面用到了回溯法,我覺得這題也是回溯法比較好的實現。 回溯法肯定用到了“剪枝”,但他的關鍵是要回溯到上一個狀態。

代碼

/** * 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) return false; int ans = 0; bool found = false; dfs( root, sum, ans, found); return found; }PRivate: void dfs(TreeNode* root, int sum, int& ret, bool& found){ if(root&&!found){ ret += root->val; if(ret == sum){ found = true; return;} else if( ret > sum ){ ret -= root->val; // backtrace return ; } else{ dfs(root->left, sum, ret, found); dfs(root->right, sum, ret, found); } } }};

或者其實你沒必要這么寫,睡了一晚上發現。這也不算回溯。就是參數傳遞的時候。不要傳遞引用了。

代碼1

/** * 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) return false; int ans = 0; bool found = false; dfs( root, sum, ans, found); return found; }private: void dfs(TreeNode* root, int sum, int ret, bool& found){ if(root&&!found){ ret += root->val; if(ret == sum){ found = true; return;} else if( ret > sum ) return; else{ dfs(root->left, sum, ret, found); dfs(root->right, sum, ret, found); } } }};

思路(本題)

因為要訪問到最底層,所以到葉子的時候判斷一下就行了。

代碼

/** * 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) return false; int ans = 0; bool found = false; dfs( root, sum, ans, found); return found; }private: void dfs(TreeNode* root, int sum, int ret, bool& found){ if(root && !found){ ret += root->val; if(!root->left && !root->right){ if(ret==sum) found = true; return; } dfs( root->left, sum, ret, found ); dfs( root->right, sum, ret, found ); } }};
上一篇:活動選擇

下一篇:列表生成器

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蓬安县| 石泉县| 铁岭市| 繁峙县| 云林县| 平遥县| 晋州市| 闽清县| 安多县| 新乐市| 桦川县| 福贡县| 高邮市| 彭泽县| 若尔盖县| 玛曲县| 通渭县| 华蓥市| 上栗县| 会泽县| 平塘县| 黄石市| 农安县| 济源市| 韶山市| 元朗区| 乌拉特前旗| 长岛县| 民权县| 永登县| 雷州市| 常熟市| 乡宁县| 应用必备| 呼伦贝尔市| 泗洪县| 黄浦区| 抚松县| 商都县| 商都县| 卓尼县|