遍历二叉树来改变每个节点的值?

时间:2013-03-08 05:04:05

标签: python

我正试图横穿二叉树,为每个节点的当前值添加“newvalue”。

def(node,2):

在:

      1
     / \
    2   3
   /\   /
  5  6  7 

后:

      3
     /\
    4  5
   /\  /
  7  8 9

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

2 个答案:

答案 0 :(得分:2)

哈罗德提供了一个非常简洁和一般的例子。这是一个带有注释的内容,适用于二叉树

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

在你的例子中: - 基本案例=节点没有子节点。不会发生递归调用 - 递归调用=每个节点都是它自己的迷你树,所以在每个子节点上调用函数

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)

如果您有任何疑问,请与我们联系。如果在学校向您展示了这个练习,他们真的只是想让您将其识别为一个简单的树遍历,您可以在遍历树时更改节点的值。我建议您尝试编写所有不同的树遍历而不需要任何注释。你将通过这种方式学习很多关于树和递归的知识。

答案 1 :(得分:1)

def add_value(node, delta):
    node.value += delta
    for child in node.children:
        add_value(child, delta)