链表和二叉树比较难做,主要因其均以链相连接,.next and .left 来输出结构中的数据,无法精确定位,所以通常用递归方法实现。
通过递归方法,本人感觉最重要的是确定.next的这部中具体实现的操作,然后逐渐实现递归。找出二叉树和为n的路径,就针对每一步做加和操作以及记录路径,并判断递归是否截至。
下面是拷贝代码, 不过思考多次仍不解,最后的list.pop与输出list1的关系。望有心着指点本菜鸡。
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def __init__(self):
self.list=[]
self.list1=[]
def FindPath(self, root, expectNumber):
# write code here
if not root:
return self.list1
self.list.append(root.val)
expectNumber-=root.val
if expectNumber==0 and root.left==None and root.right==None:
newlist=[]
for i in self.list:
newlist.append(i)
self.list1.append(newlist)
self.FindPath(root.left,expectNumber)
self.FindPath(root.right,expectNumber)
self.list.pop()
return self.list1
链表和二叉树比较难做,主要因其均以链相连接,.next and .left 来输出结构中的数据,无法精确定位,所以通常用递归方法实现。通过递归方法,本人感觉最重要的是确定.next的这部中具体实现的操作,然后逐渐实现递归。找出二叉树和为n的路径,就针对每一步做加和操作以及记录路径,并判断递归是否截至。下面是拷贝代码, 不过思考多次仍不解,最后的list.pop与输出list1的关系。望有心着指...