
剑指offer
Hannah_zh
这个作者很懒,什么都没留下…
展开
-
剑指offer—栈的压入、弹出序列(Python版)
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:借用一个辅助的栈stack,遍历压栈顺序,先讲第一个放入栈中,这里是1,...原创 2019-11-19 22:47:20 · 237 阅读 · 0 评论 -
剑指offer—包含min函数的栈(Pyhton版)
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路:看到这个问题,,我们最开始可能会想,,添加一个成员变量用于保存最小元素,,每次压栈时如果压栈元素比当前最小元素更小,就更新最小元素。但是这样会有一个问题,如果最小元素被弹出栈,就无法获得下一个最小元素。在最小元素弹出后还能得到次小元素,次小的元素弹出后,还要能得到次次小...原创 2019-11-18 23:12:57 · 191 阅读 · 0 评论 -
剑指offer—用两个栈实现队列(Python版)
题目描述:用两个栈实现一个队列,完成对列的Push和Pop操作。队列中的元素为int类型。解题思路:栈stack1用来作入队列;栈stack2用来出队列,当栈stack2为空时,栈stack1全部出栈到栈satck2,栈stack2再出栈(即出队列) 。代码实现:# -*- coding:utf-8 -*-class Solution: def __init__(self...原创 2019-11-18 22:21:55 · 166 阅读 · 0 评论 -
剑指offer—序列化二叉树(Python版)
题目描述:请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得...原创 2019-11-13 21:26:23 · 255 阅读 · 0 评论 -
剑指offer—把二叉树打印成多行(Python版)
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路:本题同“按之字形顺序打印二叉树”,使用队列存储数据。代码实现:# class TreeNode:# def __init__(self,x):# self.val = x# self.left = None# self.right = Nonecl...原创 2019-11-13 21:01:52 · 221 阅读 · 0 评论 -
剑指offer—按之字形顺序打印二叉树(Python版)
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:使用两个栈stack1和stack2,stack1存储奇数行结点(先保存右子树,再保存左子树,实际上是保存栈stack2出栈结点的右子树、左子树),stack2存储偶数行结点(先保存左子树,再保存右子树,实际上保存stack1出栈...原创 2019-11-12 20:14:41 · 262 阅读 · 0 评论 -
剑指offer—对称的二叉树(Python版)
题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:采用递归算法,只要pRoot.left和pRoot.right是否对称即可,即 :(1) 左右节点的值相等;(2) 对称子树left.left与right.right,left.rigth与right.left也对称相等。代码实现:# -*- coding...原创 2019-11-12 18:49:02 · 215 阅读 · 0 评论 -
剑指offer—二叉树的深度(Python版)
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:使用递归方法:如果该树只有一个结点,它的深度为1;如果根结点只有左子树没有右子树,那么树的深度为左子树的深度+1;同样,如果根结点只有右子树没有左子树,那么树的深度为右子树的深度+1;如果根结点既有左子树,也有右子树,该树的深度就是左子树和右子...原创 2019-11-11 21:36:07 · 211 阅读 · 0 评论 -
剑指offer—平衡二叉树(Python版)
题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路:平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个...原创 2019-11-11 21:33:08 · 210 阅读 · 0 评论 -
剑指offer—二叉树的下一个结点(Python版)
题目描述:给定一个二叉树和其中一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解题思路:二叉树的中序遍历顺序:LvR(左子树、根节点、右子树)结合上图,我们发现可分为两种情况:1、有右子树的,那么下个节点就是右子树最左边的点;2、没有右子树的,也可以分成两类:a) 是父节点左孩子,那么父节点就是下一个节点 ;b) 是...原创 2019-11-11 21:28:29 · 189 阅读 · 0 评论