深度優先遍歷 怎麼抓住小偷

2022-06-23 07:24:12 字數 926 閱讀 2229

問題描述:每棟別墅以二叉樹的結構建立,每個節點的值是財富值,小偷不能夠偷相接的別墅,問小偷最多能夠偷多少財富值?

有個規律:每乙個節點的偷值都是:左側子節點的不偷值+右側子節點的不偷值+該節點的值;不偷值:左側子節點的最大值+右側子節點的最大值。我們可以先深度優先遍歷到每乙個葉子節點,再依此計算。

class

treenode:

de __init(self,x,left=none,right=none):

self.val=x

self.left=left

self.right=right

t3=treenode(1);t4=treenode(3);t6=treenode(1

)t1=treenode(4,t3,t4);t2=treenode(5,left=none,right=t6)

root=treenode(3

,t1,t2)

def rob(root):

a=helper(root)

return max(a[0],a[1

])def helper(root):

if root ==none:

return (0,0

) left=helper(root.left)

right=helper(root.right)

robval=rot.val+left[1]+right[1

] skipval=max(left[0],left[1])+max(right[0],right[1

])

return (robval,skipval)

輸出:9

主要考察建模能力以及實現能力。

深度優先遍歷 廣度優先遍歷

用棧進行儲存元素。訪問頂點 頂點入棧,以便記住它 標記頂點,以便不會再訪問它 2 訪問規則 a.如果可能,訪問乙個鄰接的未訪問頂點,標記它,併入棧。b.當不能執行a時 沒有鄰接的未訪問頂點 如果棧不為空,就從棧中彈出乙個頂點。c.如果不能執行規則a和b,就完成了整個搜尋過程。3 實現 基於以上規則,...

深度優先遍歷

第一步 從開始節點查詢可達節點,如果有沒到過的可達節點則第二部,否則第三步 第二部 便利到下乙個可達節點,記錄下該節點已經到達節點 第三步 回到上一步的節點再從第一步開始 乙個節點對應他的可達節點用map表示,map的key和value分別是integer和list 用來存放key對應的節點 遍歷過...

深度優先遍歷

深度優先遍歷很容易列出所有可能 這裡我們分情況 標註幾個易錯的點 不重複組合 不重複組合 則表明 如果我們取k 3 取n1 n2 n3 則n1從1 9中任取 但n1需要排除n1 同理n3需要排除n1 n2 如下 public static void dfs3 int start,listnums,l...