剑指offer笔记(四) 第26题至第32题


前言

这次主要记录剑指offer的9道题,主要使用的语言是python,下面将对这9道题的一些感悟和知识点进行汇总!


提示:以下是本篇文章正文内容,下面案例可供参考 截图来源于LeetCode

一、JZ26 树的子结构

在这里插入图片描述
  见树,用递归!可以考虑使用两个递归来解决这道题,首先呐,需要确定树A与树B都是存在的,之后,判断树A与树B是否相同;最后判断树B是树A的左子树,还是树A的右子树。OK,两个递归,isSame(t1,t2) 用于判断t1与t2是否一样,isSubtructure(A,B) 用于判断树A的子结构是否与树B相同。

以下为程序源码:
在这里插入图片描述

二、JZ27 二叉树的镜像

在这里插入图片描述
  见树,用递归了!其中下面的这行代码很有特色,可以好好记住并使用。

	root.left,root.right = root.right,root.left

以下为程序源码
在这里插入图片描述

三、JZ28 对称的二叉树

在这里插入图片描述
  紧接上一道题哦!JZ27在交换左右子树的值,这道题便是判断树A的左子树是否为树B的右子树,具体的看代码,不过需要注意,把情况列举清楚了!如果树A与树B的左右子树都没有,默认是对称的,反之一个有一个没有,那就是False了。

以下为程序源码:
在这里插入图片描述

四、JZ29 顺时针打印矩阵

在这里插入图片描述
  中规中矩的判断路径情况即可,先向右走,走到什么位置,同理,向下,向左,向上,依次列举出。

以下为程序源码:
在这里插入图片描述
在这里插入图片描述

五、JZ30 包含min函数的栈

在这里插入图片描述
  因为要实现时间复杂度O(1),所以只能牺牲空间换时间,使用辅助栈B存储A每一个位置上对应的最小值。

以下为程序源码:
在这里插入图片描述
在这里插入图片描述

六、JZ31 栈的压入、弹出序列

在这里插入图片描述
  必须搞清楚,栈 - 先进后出,这里使用stack[-1]==popped[index]则是判断当前压入元素是否等于popped[index]的元素,如果是,那么stack.pop(),不是的话,继续stack.append()了。

以下为程序源码:
在这里插入图片描述

七、JZ32 - 1 从上到下打印二叉树 I

在这里插入图片描述
  没什么特别说明的,这里使用的层序遍历,使用的是迭代的方法,deque()双头队列是真的牛!popleft()从队列左面弹出,pop()从队列右面弹出,实在是好用啊!!!以后刷题会很多次遇到这个美丽的函数。

以下为程序源码:
在这里插入图片描述

八、JZ32 - 2 从上到下打印二叉树 II

在这里插入图片描述

  上一道题的扩展,需要记录遍历每层的结果作为res的子集tmp。这道题是经典的BFS模板,非常值得背诵记忆!!!

以下为程序源码:
在这里插入图片描述

九、JZ32 - 3 从上到下打印二叉树 III

在这里插入图片描述

  加个标志符flag,用它的正负调控每次tmp的输出顺序即可!

以下为程序源码:
在这里插入图片描述

十、总结

  这9道题都很基础,前三道树、后三道都是树的简单题,中间有矩阵、栈、队列的一些题,总的来说还是需要好好的学习数据结构中的基础知识,并将其转化成python的具体代码记忆在脑中,以备不时之需。最近,忽然觉着甚是焦虑不堪,我有些搞不明白,如果打算去做一件事情,而考虑的要素过于充分是不是一件好事情,现在看来,适当考虑一下就可以了,但必须符合自己的预期目标或者说基础的出发点,只要这个基本要素是符合的,那就大胆去干吧!什么也别多想,年轻人看好什么后就努力去学,去掌握,永远身怀一颗赤诚的向学之心去努力就成!
  最后,半个月没更了,这两天补上,继续背诗,学乐律,既然不知道以后做什么,喜欢什么,那就好好对待现在吧!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值