输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import copy
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
#判断是否为空
if root == None:
return []
#用来返回的列表
ret = []
supportArrayList = [[root.val]] #保存经过的每个节点的路径的值[2,3,5]
support = [root] #保存同一层级的每个节点用来做广度优先遍历的
#广度优先遍历
while support:
tmpNode = support[0]
tmpArrayList = supportArrayList[0]
if tmpNode.left == None and tmpNode.right == None: #判断是否为叶子节点
if sum(tmpArrayList) == expectNumber:
ret.insert(0,tmpArrayList)
if tmpNode.left:
support.append(tmpNode.left)
newTmpArrayList = copy.copy(tmpArrayList)
newTmpArrayList.append(tmpNode.left.val)
supportArrayList.append(newTmpArrayList)
if tmpNode.right:
support.append(tmpNode.right)
newTmpArrayList = copy.copy(tmpArrayList)
newTmpArrayList.append(tmpNode.right.val)
supportArrayList.append(newTmpArrayList)
del supportArrayList[0]
del support[0]
return ret
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import copy
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
if not root:
return []
ret = []
nodeList = [root]
nodeValList = [[root.val]]
while nodeList:
tmpNode = nodeList[0]
tmpNodeVal = nodeValList[0]
if not tmpNode.left and not tmpNode.right:
if sum(tmpNodeVal) == expectNumber:
ret.insert(0,tmpNodeVal)
if tmpNode.left:
nodeList.append(tmpNode.left)
newTmpNodeVal = copy.copy(tmpNodeVal)
newTmpNodeVal.append(tmpNode.left.val)
nodeValList.append(newTmpNodeVal)
if tmpNode.right:
nodeList.append(tmpNode.right)
newTmpNodeVal = copy.copy(tmpNodeVal)
newTmpNodeVal.append(tmpNode.right.val)
nodeValList.append(newTmpNodeVal)
del nodeList[0]
del nodeValList[0]
return ret