【Leetcode100】算法模板之二叉树
感谢博主的讲解
二叉树
- 适用场景
- 例题
- 1.翻转二叉树
- 2.最大深度
- 3.中序遍历
- 4. 公共祖先
适用场景
- 递归:
(1)子问题与原问题的关系
(2)结束递归条件
例题
1.翻转二叉树
首先分析(1),子问题是翻转每个小树,翻转后交换root结点【以及如何回溯】。----2 3
(2)终止条件为遇到NULL结点。-----1
抄袭:
因此本题步骤
1.子问题,翻转左右,right\left变量临时记录翻转后的树【递归】
2.将翻转结果赋值给root.left
最终子问题都处理完,返回root
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def invertTree(self, root):""":type root: Optional[TreeNode]:rtype: Optional[TreeNode]"""# 3.递归终止的条件if root is None:return root# 1.子问题翻转left = self.invertTree(root.left) # left保存翻转结果right =self.invertTree(root.right)# 2. exchangeroot.left = right # 替换root.right = leftreturn root