Python 遍历二叉树以更改每个节点的值?

Python 遍历二叉树以更改每个节点的值?,python,Python,我试图横穿一棵二叉树,将“newvalue”添加到每个节点的当前值中 def(节点,2): 之前: 之后: 3 /\ 4 5 /\ / 7 8 9 我应该如何递归地处理这个问题 Harold提供了一个非常干净和一般的例子。下面是一个带注释的示例,它适用于二叉树 def add_value(node, delta): node.value += delta for child in node.children: add

我试图横穿一棵二叉树,将“newvalue”添加到每个节点的当前值中

def(节点,2):

之前:

之后:

      3
     /\
    4  5
   /\  /
  7  8 9

我应该如何递归地处理这个问题

Harold提供了一个非常干净和一般的例子。下面是一个带注释的示例,它适用于二叉树

def add_value(node, delta):
    node.value += delta
    for child in node.children:
        add_value(child, delta)
对于递归算法,您必须考虑两件事: 1.基本情况 2.递归调用

在您的示例中: -基本情况=节点没有子节点。不会发生递归调用 -Recursive call=每个节点都是自己的迷你树,因此在每个子节点上调用函数

def increase_tree_values(node, delta):
    """ Increases/decreases the value of all nodes in the tree by the value 'delta'
    """

    # increase the current node's value
    node.value += delta

    # recursively call function on left child, if it exists
    if node.left_child:
        increase_tree_values(node.left_child, delta)

    # recursively call function on right child, if it exists
    if node.right_child:
        increase_tree_values(node.right_child, delta)



# presuming you have some binary tree called 'tree' already constructed
# increase all nodes in 'tree' by 2
increase_tree_values(tree, 2)

如果你有任何问题,请告诉我。如果这个练习是在学校里向您介绍的,他们实际上只是想让您将其识别为一个简单的树遍历,在遍历树时更改节点的值。我建议您尝试编程所有不同的树遍历,无需任何注释。通过这种方式,您将学到很多关于树和递归的知识

Harold提供了一个非常干净和一般的例子。下面是一个带注释的示例,它适用于二叉树

对于递归算法,您必须考虑两件事: 1.基本情况 2.递归调用

在您的示例中: -基本情况=节点没有子节点。不会发生递归调用 -Recursive call=每个节点都是自己的迷你树,因此在每个子节点上调用函数

def increase_tree_values(node, delta):
    """ Increases/decreases the value of all nodes in the tree by the value 'delta'
    """

    # increase the current node's value
    node.value += delta

    # recursively call function on left child, if it exists
    if node.left_child:
        increase_tree_values(node.left_child, delta)

    # recursively call function on right child, if it exists
    if node.right_child:
        increase_tree_values(node.right_child, delta)



# presuming you have some binary tree called 'tree' already constructed
# increase all nodes in 'tree' by 2
increase_tree_values(tree, 2)

如果你有任何问题,请告诉我。如果这个练习是在学校里向您介绍的,他们实际上只是想让您将其识别为一个简单的树遍历,在遍历树时更改节点的值。我建议您尝试编程所有不同的树遍历,无需任何注释。通过这种方式,您将学到很多关于树和递归的知识

你有更多的代码要发布吗?难道你不能只做一个前/后/顺序遍历并只更新值吗?有人能解释一下怎么做吗?!你有更多的代码要发布吗?难道你不能只做一个前/后/顺序遍历并只更新值吗?有人能解释一下怎么做吗?!也要添加一些解释,使其成为更好的答案。如果代码本身没有解释,则应该有注释。这段代码有。也要添加一些解释,使其成为更好的答案。如果代码没有解释自己,则应该有注释。这段代码可以。谢谢你的澄清,这里只是一个初学者。我可以用迭代来做,但递归让我很困惑。没问题。这需要一段时间才能掌握,但我向你保证这是值得的。我一年级的教授用集合论的术语来解释,在集合论中,一些集合通常是用它们的子集来定义的。当然,这可能导致无限回归,因此您需要一个基本情况来知道何时停止。此外,投票并接受你认为有用的答案也很好。回答这些问题的人会得到“声誉积分”,这会让堆垛溢出的车轮不停地转动;-)考虑这个链接:谢谢你的澄清,只是初学者。我可以用迭代来做,但递归让我很困惑。没问题。这需要一段时间才能掌握,但我向你保证这是值得的。我一年级的教授用集合论的术语来解释,在集合论中,一些集合通常是用它们的子集来定义的。当然,这可能导致无限回归,因此您需要一个基本情况来知道何时停止。此外,投票并接受你认为有用的答案也很好。回答这些问题的人会得到“声誉积分”,这会让堆垛溢出的车轮不停地转动;-)考虑这个链接: