class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
先序遍历
递归版
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = []
def recursive(root,res):
if root:
res.append(root.val)
recursive(root.left,res)
recursive(root.right,res)
return res
return recursive(root,res)
非递归版
def preorderTraversal(self, root: TreeNode) -> List[int]:
l = [root]
res = []
while l:
temp = l.pop()
if temp:
res.append(temp.val)
l.append(temp.right)
l.append(temp.left)
return res
中序遍历
递归版
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
def recursive(root,res):
if root:
recursive(root.left,res)
res.append(root.val)
recursive(root.right,res)
return res
return recursive(root,res)
非递归版
def inorderTraversal(self, root: TreeNode) -> List[int]:
l = [root]
res = []
while l:
while l[-1]:
l.append(l[-1].left)
l.pop()
if l:
temp = l.pop()
res.append(temp.val)
l.append(temp.right)
return res
后序遍历
递归版
def postorderTraversal(self, root: TreeNode) -> List[int]:
def recursive(root,l):
if not root:
return l
recursive(root.left,l)
recursive(root.right,l)
l.append(root.val)
return l
return recursive(root,li)
非递归版
def postorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
li = [[root,1]]
res = []
while li:
if li[-1][1] ==1:
p = li.pop()
if p[0]:
li.append([p[0],0])
li.append([p[0].right,1])
li.append([p[0].left,1])
if li[-1][1] ==0:
temp = li.pop()
res.append(temp[0].val)
return res