#!/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)