輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
這題是深度優先搜尋,它要求經過結點數值之和為乙個固定值,所以經過乙個結點就要從要求的和裡把當前結點的值減下去。
# -*- coding:utf-8 -*-
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class solution:
# 返回二維列表,內部每個列表表示找到的路徑
def findpath(self, root, expectnumber):
# write code here
if not root:
return
# not root.left and not root.right保證結點是葉子結點
if not root.left and not root.right and expectnumber == root.val:
return [[root.val]]
res =
# 分別在左右子樹找路徑
# 按照根左右的深度搜尋
left = self.findpath(root.left, expectnumber-root.val)
right = self.findpath(root.right, expectnumber-root.val)
# 把所有的路徑存在res裡
# 遞迴返回的路徑
for i in left+right: # [[a]]+[[b]] = [[a],[b]]
# 把當前的根結點放進去
return res
遞迴呼叫的特別之處是呼叫的函式自己本身,但是呼叫的過程和正常的呼叫是一樣的,進入遞迴呼叫之後就相當於進入乙個新的函式,和之前語句所處的位置沒有關係。 劍指Offer 刷題 重建二叉樹
definition for binary tree public class treenode public class solution int val pre prel 前序遍歷序列中的第乙個數即為根節點 treenode tree newtreenode val int mid 0 找到根節...
劍指Offer刷題筆記 二叉樹的映象
操作給定的二叉樹,將其變換為源二叉樹的映象。思路 遞迴的交換左右子樹。不是交換結點的數值,直接交換結點。coding utf 8 class treenode def init self,x self.val x self.left none self.right none class soluti...
劍指Offer刷題筆記 二叉樹的深度
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。就是深度搜尋,找到最大深度。coding utf 8 class treenode def init self,x self.val x self.left none self.r...