1.准备
非递归实现一定借助栈!!!
栈保存之后访问的元素!!!
指针变量t永远指向当前访问的结点!!
先一路向左,找到最左结点,此过程中边找边将待访问结点入栈(前序是右结点,中序是根节点,后序是根节点)!!!
找到尽头后该出栈了!!!
2.上代码
这是目前看来比较简洁的代码了,尤其是后序遍历的代码是最简洁之一。来自《数据结构与算法》--裘宗燕
class Node:
def __init__(self,val):
self.left=None
self.right = None
self.val = val
def preorder(root):
t = root
s = []
while t or s:
while t:
proc(t)
s.append(t.right)
t = t.left
t = s.pop()
def midorder(root):
t = root
s = []
while t or s:
while t:
s.append(t)
t = t.left
t = s.pop()
proc(t)
t = t.right
def postorder(root):
t = root
s = []
while t or s:
while t:
s.append(t)
t = t.left if t.left else t.right
t = s.pop()
proc(t)
if s and t==s[-1].left:
t = s[-1].right
else:
t = None
def proc(root):
print root.val
if __name__=='__main__':
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.left.right = Node(5)
root.right.right = Node(6)
root.right.right.left = Node(7)
print 'preorder'
preorder(root)
print 'midorder'
midorder(root)
print 'postorder'
postorder(root)