LeetCode-337 House Robber III
題目描述
The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.
Determine the maximum amount of money the thief can rob tonight without alerting the police.
?
題目大意
給定一棵二叉樹,不能同時選擇相鄰結點的數值,求可能得到的結點值之和的最大值。
?
示例
E1
Input: [3,2,3,null,3,null,1]3/ \2 3\ \ 3 1 Output: 7 Explanation:?Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.E2
Input: [3,4,5,1,3,null,1]3/ \4 5/ \ \ 1 3 1Output: 9 Explanation:?Maximum amount of money the thief can rob = 4 + 5 = 9.?
解題思路
遞歸遍歷,計算當前結點以及其孫子結點的數值之和,和該結點的兩個孩子結點之和進行比較,返回較大值。
?
復雜度分析
時間復雜度:O(N)
空間復雜度:O(N)
?
代碼
/*** 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:int rob(TreeNode* root) {int l = 0, r = 0;return dfs(root, l, r);}int dfs(TreeNode* root, int& l, int& r) {if(root == NULL)return 0;int ll = 0, lr = 0, rl = 0, rr = 0;l = dfs(root->left, ll, lr);r = dfs(root->right, rl, rr);return max(root->val + ll + lr + rl + rr, l + r);} };?
轉載于:https://www.cnblogs.com/heyn1/p/11212240.html
總結
以上是生活随笔為你收集整理的LeetCode-337 House Robber III的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Linux服务器配置java环境遇到
- 下一篇: 列表,集合,元组,字典