给出一个完整的二叉树(每个节点有1个左子节点和1个右子节点),编写一种算法以打印所有根到叶路径。
这是Python中的递归算法:
def print_tree(root):
dfs(root, '')
def dfs(root, path):
path += root.value
if not root.right and not root.left:
print path
return
if root.left:
dfs(root.left,path)
if root.right:
dfs(root.right,path)
对空间复杂度的粗略分析是: 堆栈帧上的O(log(N))(最大可调用次数为树的深度) O(log(N))在堆上(最大字符串构造数也是树的深度,给定路径是在python中不可变的字符串)。
更难的问题是:描述叶节点上的总内存使用情况。
因此,在叶节点处,我们将在调用堆栈上具有函数指针的log(N)。但是path
存在多少个“副本”或内存分配?我认为还有log(N)这样的副本,因为直到每个调用函数都返回之前,路径才被垃圾回收。
因此,在叶节点处,我们有总内存复杂度的log(N)+ log(N)。准确吗?