LeetCode 337 打家劫舍 III

2021-10-10 17:27:54 字數 784 閱讀 3864

思路:樹狀dp

對於根節點為 rt 的子樹,dp[rt][k]為其根節點取和不取(k=0/1)時子樹的最大價值,ld,rd分別為其左右節點,那麼

dp[rt][0]=max(dp[ld][0],dp[ld][1])+max(dp[rd][0],dp[rd][1]);

dp[rt][1]=dp[ld][0]+dp[rd][0]+root->val;

由於不知道其節點的下標以及dp只與其左右節點相關,因此可以直接dfs返回dp[rt][0,1]給父節點即可

code:

class

solution

pair<

int,

int>

dfs(treenode* root)

; pair<

int,

int> rt,dl,dr;

dl=dfs(root-

>left)

; dr=

dfs(root-

>right)

; rt.first=

max(dl.first,dl.second)

+max

(dr.first,dr.second)

; rt.second=dl.first+dr.first+root-

>val;

return rt;}}

;

LeetCode337 打家劫舍

在上次打劫完一條街道之後和一圈房屋後,小偷又發現了乙個新的可行竊的地區。這個地區只有乙個入口,我們稱之為 根 除了 根 之外,每棟房子有且只有乙個 父 房子與之相連。一番偵察之後,聰明的小偷意識到 這個地方的所有房屋的排列類似於一棵二叉樹 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。計...

leetcode337打家劫舍III

不搶劫該節點,則可以搶劫該節點的左右字節點 注意,node節點不搶不意味著一定要搶它的左右子結點,所以在方法中應該呼叫rob方法,而不是robinclude方法 public int robexclude treenode node return rob node.left rob node.rig...

Leetcode 337 打家劫舍 III

在上次打劫完一條街道之後和一圈房屋後,小偷又發現了乙個新的可行竊的地區。這個地區只有乙個入口,我們稱之為 根 除了 根 之外,每棟房子有且只有乙個 父 房子與之相連。一番偵察之後,聰明的小偷意識到 這個地方的所有房屋的排列類似於一棵二叉樹 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。計...