94. 二叉树的中序遍历
题目描述
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
144. 二叉树的前序遍历
题目描述
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
- 二叉树的后序遍历
题目描述
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
递归
#中序
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
f = self.inorderTraversal
return f(root.left) + [root.val] + f(root.right) if root else []
#前序
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
f = self.preorderTraversal
return [root.val] + f(root.left) + f(root.right) if root else []
#后序
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
f = self.postorderTraversal
return f(root.left) + f(root.right) + [root.val] if root else []
迭代
#中序
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
ans = []
stack = []
while stack or root:
if root:
stack.append(root)
root = root.left
else:
tmpNode = stack.pop()
ans.append(tmpNode.val)
root = tmpNode.right
return ans
#前序
class Solution(object):
def preorderTraversal(self, root):
ret = []
stack = [root]
while stack:
node = stack.pop()
if node:
ret.append(node.val)
stack.extend([node.right,node.left])
return ret
#后序
class Solution:
def postorderTraversal(self, root):
traversal, stack = [], [root]
while stack:
node = stack.pop()
if node:
traversal.append(node.val)
stack.extend([node.left,node.right])
return traversal[::-1]