classguide(object):def__init__(self, opt,node):
self.opt = opt
self.node = node
classSolution2(object):defpreorderTraversal(self, root):"""
:type root: TreeNode
:rtype: List[int]
"""if root isNone:return[]
ans =[]
path =[guide(0,root),]while path:
current = path.pop()ifnot current.node:continueif current.opt ==1:
ans +=[current.node.item]else:
path +=[guide(0,current.node.right)]
path +=[guide(0,current.node.left)]
path +=[guide(1,current.node)]return ans
definorderTraversal(self, root):"""
:type root: TreeNode
:rtype: List[int]
"""if root isNone:return[]
ans =[]
path =[guide(0,root),]while path:
current = path.pop()ifnot current.node:continueif current.opt ==1:
ans +=[current.node.item]else:
path +=[guide(0,current.node.right)]
path +=[guide(1,current.node)]
path +=[guide(0,current.node.left)]return ans
defpostorderTraversal(self, root):"""
:type root: TreeNode
:rtype: List[int]
"""if root isNone:return[]
ans =[]
path =[guide(0,root),]while path:
current = path.pop()ifnot current.node:continueif current.opt ==1:
ans +=[current.node.item]else:
path +=[guide(1,current.node)]
path +=[guide(0,current.node.right)]
path +=[guide(0,current.node.left)]return ans
Test case:
if __name__ =="__main__":
tree =tree.Node()
tree._add(0)
tree._add(1)
tree._add(2)
tree._add(3)
tree._add(4)
tree._add(5)
tree._add(6)
tree._add(7)
tree._add(8)
tree._add(9)
tree._add(10)
ans = Solution3().preorderTraversal(tree)
print ans
ans = Solution3().inorderTraversal(tree)
print ans
ans = Solution3().postorderTraversal(tree)
print ans
Binary Tree Traverasl with OOB and Stack1、一切都是对象,对象就是关系和操作;每个节点,都有两种操作,print和visit。2、放在stack里面可以使操作,可以是函数,递归也是面向对象的体现;Python代码实现如下:class guide(object): def __init__(self, opt,node): s...