递归和非递归方法中序遍历二叉树 Leetcode题
递归方法:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ans = []
if root==None:
return ans
self.inTraverse(root, ans)
return ans
def inTraverse(self, t, ans):
if t.left:
self.inTraverse(t.left, ans)
ans.append(t.val)
if t.right:
self.inTraverse(t.right, ans)
非递归:
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
# ans = []
# if root==None:
# return ans
# self.inTraverse(root, ans)
# return ans
# def inTraverse(self, t, ans):
# if t.left:
# self.inTraverse(t.left, ans)
# ans.append(t.val)
# if t.right:
# self.inTraverse(t.right, ans)
ans = []
if root==None:
return ans
stack = []
p = root
while(p or len(stack)):
if p:
stack.append(p)
p = p.left
else:
p = stack[-1]
stack.pop(-1)
ans.append(p.val)
p = p.right
return ans