简体   繁体   English

前序二叉树遍历递归方法

[英]Preorder Binary Tree traversal Recursive method

I was trying to understand implementation of Binary Tree traversal (PreOrder).我试图了解二叉树遍历(PreOrder)的实现。 The non recursive approach was fine, but I am totally lost while trying to understand the recursive approach.非递归方法很好,但是在尝试理解递归方法时我完全迷失了。

Code:代码:

def preorder_print(self, start, traversal): """Root->Left->Right"""
if start:
    traversal += (str(start.value) + "-")
    traversal = self.preorder_print(start.left, traversal)
    traversal = self.preorder_print(start.right, traversal)
return traversal

Binary Tree二叉树

    8
   / \
  4   5
 / \   \
2   1   6

My understanding is while reaching Node 2(8-4-2), left of that node 2 is None.我的理解是在到达节点 2(8-4-2)时,节点 2 的左侧是无。 So if start: condition would fail.所以if start:条件会失败。

Below are my questions.以下是我的问题。

  1. After node2.left is None, how node2.right is traversed? node2.left为None后,node2.right如何遍历? (because if start: condition fails) (因为如果开始:条件失败)
  2. After node1, how the logic moves to node5 which rootNode.right?在node1之后,逻辑如何移动到node5的哪个rootNode.right?

My understanding on recursion is poor, kindly help!我对递归的理解很差,请帮助!

Watch this, see if this helps:看这个,看看这是否有帮助:

class Node(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
    def addleft(self,value):
        self.left = Node(value)
    def addright(self,value):
        self.right = Node(value)
    def preorder_print(self, start, traversal='', depth=0): 
        print( " "*depth, start.value if start else "None" )
        if start:
            traversal += (str(start.value) + "-")
            print(' '*depth, "check left")
            traversal = self.preorder_print(start.left, traversal, depth+1)
            print(' '*depth, "check right")
            traversal = self.preorder_print(start.right, traversal, depth+1)
        return traversal

base = Node(8)
base.addleft(4)
base.left.addleft(2)
base.left.addright(1)
base.addright(5)
base.right.addright(6)

print( base.preorder_print( base ) )

Output: Output:

 8
 check left
  4
  check left
   2
   check left
    None
   check right
    None
  check right
   1
   check left
    None
   check right
    None
 check right
  5
  check left
   None
  check right
   6
   check left
    None
   check right
    None
8-4-2-1-5-6-

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

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