先序遍历
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a list of integers
def preorderTraversal(self, root):
stack = []
ret = []
while root or len(stack):
if root:
stack.append(root)
ret.append(root.val)
root = root.left
else:
root = stack.pop()
root = root.right
return ret
后序遍历
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a list of integers
def postorderTraversal(self, root):
s=[]
ret=[]
s.append(root)
curTree=None
preTree=None
while 0 != len(s):
curTree=s[-1]
if None == curTree:
return ret
if( (None==curTree.left and None==curTree.right) or
(None != preTree and (preTree==curTree.left or preTree==curTree.right)) ):
ret.append(curTree.val)
s.pop()
preTree=curTree
else:
if None != curTree.right:
s.append(curTree.right)
if None != curTree.left:
s.append(curTree.left)
return ret
中序遍历
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a list of integers
def inorderTraversal(self, root):
stack=[]
ret = []
while root or len(stack):
if root:
stack.append(root)
root=root.left
else:
tmp = stack.pop()
root = tmp.right
ret.append(tmp.val)
return ret