【二叉树的所有路径】

这篇博客主要介绍了如何创建二叉树以及通过`findNodes`和`findPaths`两个函数实现对二叉树的节点查找和路径遍历。在`findNodes`函数中,递归地收集所有节点值;而在`findPaths`函数中,记录从根节点到叶子节点的所有路径。示例中,使用了一个包含1、2、3的列表创建了二叉树,并输出了所有节点值和从根节点到叶子节点的路径。

LintCode 炼码

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def Tree(node=[]):#创建二叉树
    if node is None or len(node)==0:#node初始为[]或者为None
        return None
    data=node.pop(0)
    if data is None:#node中有None时
        return
    root=TreeNode(data)
    root.left=Tree(node)
    root.right=Tree(node)
    return root

l=[1,2,3]
root=Tree(l)

def findNodes(node,nodes):
    if not node:
        return
    nodes.append(node.val)
    findNodes(node.left,nodes)
    #上面执行完后node'=node.left将回溯到node
    findNodes(node.right,nodes)

def findPaths(node,path,paths):#path存入根节点node类的加入顺序,即搜素顺序
    if not node:
        return
    if not node.left and not node.right:#找到叶子节点后,将path中的所有类,即node根节点的val加到paths中
        paths.append('->'.join([str(n.val) for n in path]))#有几个叶节点就append几次paths
        return
    path.append(node.left)
    findPaths(node.left,path,paths)
    path.pop()
    path.append(node.right)
    findPaths(node.right,path,paths)
    path.pop()


nodes=[]
findNodes(root,nodes)
print(nodes)
path=[root]
paths=[]
findPaths(root,path,paths)
print(path)
print(paths)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值