感谢博主的讲解
二叉树
适用场景
- 递归:
(1)子问题与原问题的关系
(2)结束递归条件
例题
1.翻转二叉树

首先分析(1),子问题是翻转每个小树,翻转后交换root结点【以及如何回溯】。----2 3
(2)终止条件为遇到NULL结点。-----1
抄袭:
因此本题步骤
1.子问题,翻转左右,right\left变量临时记录翻转后的树【递归】
2.将翻转结果赋值给root.left
最终子问题都处理完,返回root
c
# 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. exchange
root.left = right # 替换
root.right = left
return root