前序、中序、后序的区别是:根节点的位置,根节点在前,那就是前序,根节点在中,那就是中序,根节点在后,那就是后序。
层序遍历:二叉树一层一层的进行遍历。
前序遍历
具体过程如下:
先访问根节点,再访问左右节点,如果左节点是下面还有的话,那就再访问左节点的左节点,再访问左节点下的右节点。以此类推。
代码如下:
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def dfs(node):
if node is None:
return
ans.append(node.val) # 先访问根节点
dfs(node.left) # 再访问左节点
dfs(node.right) # 再访问右侧节点
dfs(root)
return ans
中序遍历
中序遍历的话,那就先访问左节点,再访问根节点,再访问右侧节点(将根节点放置在中间。)
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def dfs(node):
if node is None:
return
dfs(node.left) #先访问左节点
ans.append(node.val) #再访问根节点
dfs(node.right) # 再访问右侧节点
dfs(root)
return ans
后序遍历
后序遍历先左节点,再右侧节点,再根节点(将根节点放置在最后进行访问)
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
ans = []
def dfs(node):
if node is None:
return
dfs(node.left) # 先左节点
dfs(node.right) # 再右侧节点
ans.append(node.val) # 最后根节点
dfs(root)
return ans
层序遍历
一层一层的进行遍历了
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
ans = []
stack = [root] if root else [] # 保存根节点
while stack:
nex = [] # 临时存放中间节点
ans.append([node.val for node in stack]) #输出根节点的值
for node in stack: # 依次访问根节点的左右
if node.left:
nex.append(node.left) #将中间节点临时存放起来,
if node.right:
nex.append(node.right)
stack = nex 将中间结果视为根节点,重新再来
return ans
N叉树的层序遍历
class Solution:
def levelOrder(self, root: 'Node') -> List[List[int]]:
if not root:
return []
res=[]
q=[root]
while q:
res.append([i.val for i in q])
for i in range(len(q)):
node=q.pop(0)
for j in node.children:
q.append(j)
return res