Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree [1,null,2,3]
,
1 \ 2 / 3
return [1,3,2]
.
Note: Recursive solution is trivial, could you do it iteratively?
递归方法:
#前序遍历
def pre_order(tree):
if tree==None:
return
print tree.data
pre_order(tree.left)
pre_order(tree.right)
#中序遍历
def mid_order(tree):
if tree==None:
return
mid_order(tree.left)
print tree.data
mid_order(tree.right)
#后序遍历
def post_order(tree):
if tree==None:
return
post_order(tree.left)
post_order(tree.right)
print tree.data
非递归方法(借助栈):
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#中序
def inOrder(self, root):
if root == None:
return
myStack = []
node = root
while node or myStack:
while node:
# 从根节点开始,一直找它的左子树
myStack.append(node)
node = node.lchild
# while结束表示当前节点node为空,即前一个节点没有左子树了
node = myStack.pop()
print node.val
# 开始查看它的右子树
node = node.rchild
#前序
def preOrder(self, root):
if root == None:
return
myStack = []
node = root
while node or myStack:
while node:
# 从根节点开始,一直找它的左子树
print node.val
myStack.append(node)
node = node.lchild
# while结束表示当前节点node为空,即前一个节点没有左子树了
node = myStack.pop()
# 开始查看它的右子树
node = node.rchild
#后序
def aftOrder(self,root):
if not root:
return
stackNode = []
markNode = None
node = root
while stackNode or node:
while node:
stackNode.append(node)
node = node.left
node = stackNode.pop()
if not node.rightNode or node.rightNode is markNode:
#node has no rightNode or node's rightNode has been checked
print node.value,
markNode = node
node = None
else:
stackNode.append(node)
node = node.right