繁体   English   中英

python 二叉树递归

[英]python binary tree recursion

class Node:
    def __init__(self,value):
        self.value = value 
        self.right = None
        self.left = None

class Tree:
    def __init__(self,root):
        self.root = Node(root) 

    def print_tree(self):
        return self.preorder_print(self.root,"")

    def preorder_print(self,start,traversal):
        if start:
            print('step 1')
            traversal = self.preorder_print(start.left, traversal)
            print('step 2')
            traversal +=(str(start.value)+"-")
            print('step 3')
            traversal = self.preorder_print(start.right, traversal)
        return traversal


"""
             F
        B         G
    A      D        I
        C    E   H 

In- order print: A->B->C->D->E->F->G->H->I
"""


tree = Tree("F")
tree.root.left = Node("B")
tree.root.right = Node("G")
tree.root.right.right = Node("I")
tree.root.right.right.left = Node("H")

tree.root.left.left = Node("A")
tree.root.left.right = Node("D")
tree.root.left.right.left = Node("C")
tree.root.left.right.right = Node("E")
print(tree.print_tree())

我知道“第 1 步”递归到最左边,节点(“A”),但是当到达 A 之后,

  1. func 是如何摆脱这种递归的? 它是否进入下一行,“第 2 步”?

  2. “第 1 步”中遍历的返回值是多少?

  1. 是的,有很多程序员在可视化递归方面遇到了麻烦。
  2. 是的,当递归到达Node A时,递归确实有帮助。
  3. function 在if start:语句中跳出递归(基本情况)。

顺便说一句,您发布的代码输出如下: ABCDEFGHI-

您的数据的基本情况示例如下:当代码进入preorder_print()start引用Node("A")时, if start:通过并且下一条语句是traversal = self.preorder_print(start.left, traversal)start.left传递到下一层。

现在因为Node("A")leftright都设置为默认的None ,上面的调用是一个nop并且只返回traversal ,所以下一条语句是traversal += str(start.value) + "-"其中start.value"A"

同样,下一条语句traversal = self.preorder_print(start.right, traversal)是一个nop ,然后return traversal退出该级别并上升一个级别。

现在我们回到self.preorder_print()刚刚执行了traversal = self.preorder_print(start.left, traversal)其中start指的是Node("B")start.left指的是Node("A")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM