1. 程式人生 > >劍指offer之二叉樹中和為某一值的路徑(Python)

劍指offer之二叉樹中和為某一值的路徑(Python)

題目描述

輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

思路:首先要理解題意,是從根節點往子節點連。

1、如果只有根節點或者找到葉子節點,我們就把其對應的val值返回

2、如果不是葉子節點,我們分別對根節點的左子樹、右子樹進行遞迴,直到找到葉子結點。然後遍歷把葉子結點和父節點對應的val組成的序列返回上一層;如果沒找到路徑,其實也返回了序列,只不過是[]

程式碼如下:

# -*- coding:utf-8 -*-
class TreeNode():
	def __init__(self,x):
		self.val = x
		self.left = None
		self.right = None

def function(root,target_number):
	result = []
	if not root:
		return result
#	如果只有根節點或者找到葉子節點,我們就把其值返回
	if not root.left and not root.right and root.val == target_number:
		return [[root.val]]
	else:
#	如果不是葉子節點,我們分別對根節點的左子樹、右子樹進行遞迴,注意修改變數:
		left = function(root.left,target_number - root.val)
		right = function(root.right,target_number - root.val)
		for item in left+right:
			result.append([root.val]+item)
		return result