代码随想录算法训练营第七天补卡| leetcode144\145\94 二叉树的左右中序遍历
·题目:二叉树的递归遍历
https://leetcode.cn/problems/binary-tree-inorder-traversal/
https://leetcode.cn/problems/binary-tree-postorder-traversal/
https://leetcode.cn/problems/binary-tree-preorder-traversal/
·代码随想录链接:
https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF
·视频链接:https://www.bilibili.com/video/BV1Wh411S7xt/?vd_source=24b3ef41e1f1aa95376fbdacb067e31f
·核心思想:
·依据递归思想:针对根节点进行遍历访问,访问根节点时res.append(node.val)。
·三种遍历方式:前序为中左右,中序为左中右,后序为左右中。
·递归遍历思想:
- 1)定义递归函数的输入参数\输出参数---输入参数为访问节点node;
- 2)确定终止条件;---访问节点为空则结束。
- 3)提取每次递归的步骤:二叉树的遍历顺序,以前序遍历为参考:res.append(node.val);dfs(node.left);dfs(node.right)
·代码:
前序遍历:
class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: #核心思想: #定义遍历函数dfs:含输入参数为node访问节点、输出返回; #终止条件为遍历节点为空; #每层的遍历顺序,访问则append加入(node.val): res = [] def dfs(node): if node is None: return res.append(node.val) dfs(node.left) dfs(node.right) dfs(root) return res中序遍历:
class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: res = [] def dfs(node): if node is None: return dfs(node.left) res.append(node.val) dfs(node.right) dfs(root) return res后序遍历:
class Solution: def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: res = [] def dfs(node): if node is None: return dfs(node.left) dfs(node.right) res.append(node.val) dfs(root) return res·递归思想总结:总体结构:
dfs(输入参数)->输出参数:
if(终止条件):return False/None
递归调用体:temp0()其他处理;自调用dfs(参数1)
return 输出参数
