力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历
要求:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
递归解法:
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def traversal(node):
if node is None:
return
traversal(node.left)# 左
result.append(node.val) # 中
traversal(node.right) # 右
traversal(root)
return result
迭代解法:
python
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
stack = []
current = root
while current or stack:
if current:
stack.append(current)
current = current.left
else:
current = stack.pop()
result.append(current.val)
current = current.right
return result
要求:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
递归解法:
python
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def traversal(node):
if node is None:
return
result.append(node.val)
traversal(node.left)
traversal(node.right)
traversal(root)
return result
迭代解法:
python
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root is None: # 一定要检查根节点是否为空
return []
result = []
stack = [root]
while stack:
node = stack.pop()
result.append(node.val)
if node.right: # 先右后左
stack.append(node.right)
if node.left: # 左子节点后入栈,会先出栈
stack.append(node.left)
要求:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
递归解法:
python
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def traversal(node):
if node is None:
return
traversal(node.left)
traversal(node.right)
result.append(node.val)
traversal(root)
return result
迭代解法:
python
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root is None:
return []
result = []
stack = [root]
while stack:
node = stack.pop()
result.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return result[::-1]