剑指offer 二叉树专题 (18)对称二叉树递归思路

微信公众号:Jerry的算法和NLP

题目


从上到下打印二叉树

题目要求

 

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

   1


  / \


 2   2


/ \ / \


3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

   1


  / \


 2   2


  \   \


  3    3

 

解题思路

二叉树的题目还是推荐使用递归的方式去解决。

对于节点当前状态的管理,应该有如下三种状态:

  1. 左孩子和右孩子都是空

  2. 只存在其中一个孩子

  3. 两个孩子都存在


  1. 两个孩子都不存在,说明当前节点为叶子节点,以当前节点为根,那么往下的二叉树都是镜像二叉树,返回True

  2. 只存在一个孩子,那么以当前节点为根,往下的二叉树无论怎么发展都不可能是镜像二叉树,返回False

  3. 两个孩子都存在,如果两个孩子的值相等才有继续讨论的可能

    当两个孩子的值相同的时候,假设左孩子为left,右孩子为right

    当left的左孩子与right的右孩子对称且 left的有孩子与right的左孩子堆成的时候 才能返回True

    其他情况返回False

# 代码

Python :

 1# -*- coding:utf-8 -*-
 2# class TreeNode:
 3#     def __init__(self, x):
 4#         self.val = x
 5#         self.left = None
 6#         self.right = None
 7class Solution:
 8    def isSymmetrical(self, root):
 9        # write code here
10        if not root:
11            return True
12        return self.dfs(root.left,root.right)
13    def dfs(self,left,right):
14        if not left or not right:
15            return not left and not right
16        if left.val!=right.val:
17            return False
18        return self.dfs(left.left,right.right) and self.dfs(left.right,left.right)

后记

2020大厂笔试 | 网易提前批(1) 

2020大厂笔试 | 网易提前批(2) 

2020大厂笔试 | 小红书 

2020大厂笔试 | 腾讯

背包九讲(1)0/1背包问题

背包九讲(2)完全背包问题

数据结构类题目

具体算法类题目

  • 斐波那契数列

    • 007-斐波拉契数列

    • 008-跳台阶

    • 009-变态跳台阶

    • 010-矩形覆盖

  • 搜索算法

    • 001-二维数组查找

    • 006-旋转数组的最小数字(二分查找)

    • 037-数字在排序数组中出现的次数(二分查找)

  • 全排列

    • 027-字符串的排列

  • 动态规划

    • 030-连续子数组的最大和

    • 052-正则表达式匹配(我用的暴力)

  • 回溯

    • 065-矩阵中的路径(BFS)

    • 066-机器人的运动范围(DFS)

  • 排序

    • 035-数组中的逆序对(归并排序)

    • 029-最小的K个数(堆排序)

    • 029-最小的K个数(快速排序)

  • 位运算

  • 其他算法

    • 002-替换空格

    • 013-调整数组顺序使奇数位于偶数前面

    • 028-数组中出现次数超过一半的数字

    • 031-整数中1出现的次数(从1到n整数中1出现的次数)

    • 032-把数组排成最小的数

    • 033-丑数

    • 041-和为S的连续正数序列(滑动窗口思想)

    • 042-和为S的两个数字(双指针思想)

    • 043-左旋转字符串(矩阵翻转)

    • 046-孩子们的游戏-圆圈中最后剩下的数(约瑟夫环)

    • 051-构建乘积数组

剑指offer刷题交流群

  扫码添加微信,一定要备注研究方向+地点+学校+昵称(如机器学习+上海+上交+汤姆),只有备注正确才可以加群噢。

 ▲长按加群

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值