LeetCode337 樹 打家劫舍 III

2021-10-10 15:58:09 字數 711 閱讀 4720

遞迴求解

本質上就是間隔遍歷

把問題直接簡化成兩個部分:

①偷父節點。那就是隔行遍歷左右節點,因為不能偷連續的節點。但是注意,隔行遍歷一定要判斷有無空指標!

②不偷父節點。可以畫幾個示意圖看看,不偷父節點的話就是父節點的左子樹+右子樹的值,依次加下去

最後返回乙個最大的金額

class

solution

if(root-

>left==

nullptr

&&root-

>right==

nullptr

)//偷父節點的

int cash1=root-

>val;

int cash2=0;

if(root-

>left!=

nullptr)if

(root-

>right!=

nullptr

)//不偷父節點

cash2+

=rob

(root-

>left)

+rob

(root-

>right)

;return cash1>cash2?cash1:cash2;}}

;

LeetCode337 打家劫舍

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

leetcode 337打家劫舍 樹dp

class solution def rob self,root treenode int 最大問題分解為 在樹中,最常見的就是不斷劃分子樹 所以找每乙個節點的字數最大 維護兩個全域性字典 f g f none 0 g none 0 f means choose this node,g means ...

leetcode337打家劫舍III

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