97-99/300
- /144. /145. 二叉树的中序/前序/ 后序遍历
给定一个二叉树,返回它的中序/前序/ 后序遍历。
示例:输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]/[1,2,3]/[3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
中序:左子树->根节点->右子树
前序:根节点->左子树->右子树
后序:左子树->右子树->根节点
思路1: recursion
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
self.lst = []
def dfs(root):
if not root: return
dfs(root.left)
self.lst.append(root.val)
dfs(root.right)
dfs(root)
return self.lst
def preorderTraversal(self, root: TreeNode) -> List[int]:
self.lst = []
def dfs(root):
if not root: return
self.lst.append(root.val)
dfs(root.left)
dfs(root.right)
dfs(root)
return self.lst
def postorderTraversal(self, root: TreeNode) -> List[int]:
self.lst = []
def dfs(root):
if not root: return
dfs(root.left)
dfs(root.right)
self.lst.append(root.val)
dfs(root)
return self.lst
思路2: stack
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
stack, res = [(root, False)], []
while stack:
node, visited = stack.pop()
if not visited:
if node.right:
stack.append((node.right, False))
stack.append((node, True))
if node.left:
stack.append((node.left, False))
else:
res.append(node.val)
return res
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
stack, res = [(root, False)], []
while stack:
node, visited = stack.pop()
if not visited:
if node.right:
stack.append((node.right, False))
if node.left:
stack.append((node.left, False))
stack.append((node, True))
else:
res.append(node.val)
return res
def postorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
stack, res = [(root, False)], []
while stack:
node, visited = stack.pop()
if not visited:
stack.append((node, True))
if node.right:
stack.append((node.right, False))
if node.left:
stack.append((node.left, False))
else:
res.append(node.val)
return res
so-far 二叉树类型题:
104 二叉树的最大深度
112 路径总和
113 路径总和 II
437 路径总和 III
124 二叉树中的最大路径和
49/144/145 二叉树的中序/前序/后序遍历