618 字
3 分钟
代码随想录算法训练营第十三天 | 二叉树 Part03
二叉树前序遍历(根-左-右)
- 一般用于需要先处理根节点的场景。
- 典型应用:
- 复制一棵树(先创建根节点,再递归复制子树)。
- 序列化和反序列化二叉树。
- 先序表达式计算。
二叉树中序遍历(左-根-右)
- 适合需要按顺序处理节点的场景。
- 典型应用:
- 二叉搜索树的排序,因为中序遍历得到的是排序后的节点值序列。
- 验证一棵树是否为二叉搜索树(中序遍历结果是否单调递增)。
- 构建有序数据结构。
二叉树后序遍历(左-右-根)
- 适合需要先处理子节点的场景。
- 典型应用:
- 删除一棵树(先删除子节点,再删除根节点,避免内存泄漏)。
- 计算子树相关信息后再更新根节点,如计算树的高度、判断平衡性。
- 表达式树的后缀表达式计算。
110. 平衡二叉树
class Solution: # 因为处理子节点的场景,所以使用后序遍历 def isBalanced(self, root: Optional[TreeNode]) -> bool: # 调用辅助函数获取高度,若返回-1表示不平衡 return self.get_height(root) != -1
def get_height(self, root): if not root: return 0 left = self.get_height(root.left) if left == -1: return -1 right = self.get_height(root.right) if right == -1: return -1 if abs(left - right) > 1: return -1 else: return max(left, right) + 1
257. 二叉树的所有路径
class Solution: # 因为处理子节点的场景,所以使用后序遍历 def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]: res = [] path = [] if not root: return res path.append(root.val) self.traverse(root, path, res) return res
def traverse(self, root, path, res): # 到达叶子节点,路径加入结果 if not root.left and not root.right: sPath = '->'.join(map(str, path)) res.append(sPath) return # 遍历左子树 if root.left: path.append(root.left.val) self.traverse(root.left, path, res) path.pop() # 遍历右子树 if root.right: path.append(root.right.val) self.traverse(root.right, path, res) path.pop()
404. 左叶子之和
class Solution: # 处理子节点的场景,所以使用后序遍历 def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int: if not root: return 0 left = self.sumOfLeftLeaves(root.left) # 判断左子节点是否为叶子节点 if root.left and not root.left.left and not root.left.right: left = root.left.val right = self.sumOfLeftLeaves(root.right) sum_val = left + right return sum_val
222. 完全二叉树的节点个数
class Solution: # 因为处理子节点的场景,所以使用后序遍历 def countNodes(self, root: Optional[TreeNode]) -> int: return self.traverse(root)
def traverse(self, root): if not root: return 0 left = self.traverse(root.left) right = self.traverse(root.right) sum_val = left + right + 1 return sum_val
代码随想录算法训练营第十三天 | 二叉树 Part03
https://fuwari.vercel.app/posts/code_musings_day_thirteen/