题目:
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
题意:
给定一棵二叉树,返回从根到叶子的所有路径
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def addpath(self, root, path, result) : #新定义一个子函数,用于运用递归的方法深度遍历树。为方便,将每条路径也放在list里存储。path:记录一条路径;result:记录所有的路径。都为list结构。
path.append(str(root.val)) #将当前根节点插入到路径path中
if root.left == None and root.right == None : #如果当前节点已是叶子节点,则深度优先搜索结束,退出递归,将当前路径path转换成string格式存在result中
return result.append('->'.join(path))
else : #否则,该节点不是叶子节点,继续遍历其左孩子或右孩子
if root.left != None :
lpath = copy.deepcopy(path) #深拷贝,另外再分配一块空间,得到独立的一个拷贝,拷贝得到该节点之前的路径path,用于后序递归
self.addpath(root.left, lpath,result) #此处如果用浅拷贝,则相当于是对之前path的一个重命名,当后续path有改变时,此处的path也会改变
if root.right != None : #如果使用浅拷贝,最后得到的每一条路径全都长一个样,全都是遍历所有节点的结果
rpath = copy.deepcopy(path)
self.addpath(root.right, rpath,result)
def binaryTreePaths(self, root): #系统给的函数
# @param {TreeNode} root
# @return {string[]}
path = [] #初始化路径为空
result = [] #初始化遍历结果
if root == None :
return result
else :
self.addpath(root,path,result)
return result
笔记:
1、深度遍历一条路径,将路径作为元素插在list里,之间的逻辑还可以继续想想
2、学习了深拷贝和浅拷贝的知识,具体参考:http://www.01happy.com/python-shallow-copy-and-deep-copy/