二叉树的先序遍历和非递归遍历

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon May 13 15:48:30 2019

@author: lg
"""

class Node:  
    def __init__(self,value=0,left=0,right=0):  
        self.value=value  
        self.left=left    #左子树
        self.right=right  #右子树

def preTraverse(root):  
    '''
    前序遍历
    '''
    #print('#'*6)
    if root==0:
        #print('这个节点的值是',root)
        return 9 
    print(root.value)  
    preTraverse(root.left)  
    preTraverse(root.right)  






 
def pre_order_recursion(root):     #递归实现前序遍历
    if  root==0:
        return
    print( root.value)
    pre_order_recursion(root.left)
    pre_order_recursion(root.right)
 
def pre_order_stack(root):         #堆栈实现前序遍历(非递归)
    if root.value==0:
        return
    myStack = []
    node = root
    while myStack or node:
        while node:       #从根节点开始,一直寻找他的左子树
            print (node.value)
            myStack.append(node)
            node = node.left
        node = myStack.pop()    #while结束表示当前节点node为空,即前一个节点没有左子树了
        node = node.right       #开始查看它的右子树
 

                
if __name__ == '__main__':
    #主函数
     #逐个加入树的节点
     
    
    
    root=Node('D',
                 Node('B',Node('A'),Node('C')),
                 Node('E',Node('G'),Node('F'))

                 )
    print ('递归实现前序遍历:')
    pre_order_recursion(root)
 
    print( '\n堆栈实现前序遍历')
    pre_order_stack(root)
posted @ 2022-08-19 22:53  luoganttcc  阅读(6)  评论(0)    收藏  举报