Python-二叉树路径和

题目要求:

输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。

此处路径定义为:从根节点开始,往下一直到一个叶节点,其所经过的所有节点所形成的路径

要点:

1.路径的保存

2.二叉树的遍历

3.是否考虑节点为负值或0

代码:(递归实现)

# coding=utf-8

"""
question:
输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
路径定义为从树的根节点开始往下一直到叶节点所经过的节点所形成的路径。
"""


# 节点类
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left_child = None
        self.right_child = None


# 在根节点为 root 的树中寻找和为 n 的路径
def find_sum_path(root, n):
    ret = []  # 答案路径列表

    # 在根节点为 root 的树中寻找和为 n 的路径,以前的路径为 path
    # 这里讨论的算法是树的所有节点的值都是正数
    def find_path(root, path, n):
        path.append(root.val)  # 当前节点加入路径
        if root.val > n:  # 节点值已经大于 n,无解,若考虑负数,此分支不应存在
            pass
        elif root.val == n and root.left_child is None and root.right_child is None:  # 解路径
            ret.append(path.copy())
        else:
            if root.left_child:  # 遍历左子树
                find_path(root.left_child, path, n - root.val)
            if root.right_child:  # 遍历右子树
                find_path(root.right_child, path, n - root.val)
        path.pop()  # 当前节点从路径删除

    find_path(root, [], n)
    return ret


if __name__ == '__main__':
    # 构造一棵树
    """
            10
         6      15
              11   20
             9
    """
    l = [6, 9, 10, 11, 15, 20]
    t = []
    for i in l:
        t.append(TreeNode(i))
    t[2].left_child = t[0]
    t[2].right_child = t[4]
    t[4].left_child = t[3]
    t[4].right_child = t[5]
    t[3].left_child = t[1]

    # 测试
    print(find_sum_path(t[2], 36))
    print(find_sum_path(t[2], 16))
    print(find_sum_path(t[2], 45))

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python二叉树是一种常用的数据结构,可以用来表示具有层次关系的数据。在Python中,我们可以使用节点和指针的方式来实现二叉树。节点表示树的每一个元素,包含一个值和两个指针,分别指向左子树和右子树。 二叉树的镜像转换是指将二叉树中的每个节点的左右子树进行交换,从而得到一个新的二叉树。可以使用递归的方式实现镜像转换。首先判断当前节点是否为空,如果为空则返回None;否则,创建一个新节点,将当前节点的值赋给新节点,并递归调用镜像转换函数,交换左右子树的位置。具体的Python实现可以参考引用中的方法。 另外,平衡二叉树是一种特殊的二叉排序树,它的左右子树的高度差不超过1。平衡二叉树的性质保证了插入、删除等操作的时间复杂度为O(logn)。关于平衡二叉树的详细介绍可以参考引用。 在二叉树中,还有一些常用的概念需要了解。比如,二叉树的深度(或高度)表示从根节点到最远叶子节点的路径上的节点个数;二叉树的节点个数可以通过节点的度数进行计算;完全二叉树是一种特殊的二叉树,除了最后一层可能不满,其他层都是满的。这些概念可以帮助我们更好地理解和分析二叉树。更多关于二叉树的类型和性质可以参考引用。 总结起来,Python二叉树是一种常用的数据结构,可以使用节点和指针的方式来实现。二叉树的镜像转换可以通过递归的方式实现。平衡二叉树是一种特殊的二叉排序树,左右子树的高度差不超过1。而二叉树的深度、节点个数和类型等概念可以帮助我们更好地理解和操作二叉树。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值