关闭

剑指Offer试题总结(二)

423人阅读 评论(0) 收藏 举报


包含min函数的栈:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push和pop的时间复杂度都是O(1)?

因为栈的Push和pop的操作时间复杂度都是O(1),所以现在考虑怎么让min的复杂度也是O(1)。如果在该栈中维护一个最小值的元素,则第一次min操作的时候可以正确取出最小值,但接下来的min操作则无法取得最小值。所以可以考虑设置一个辅助栈,首先把第一个元素压入辅助栈中,下面,对每一个元素,如果该元素小于辅助栈的栈顶元素,则将该元素压入辅助栈,否则将辅助栈的栈顶元素复制并压入。

栈的压入、弹出序列:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列?

思路比较清晰,建立一个辅助栈,试图按照第二个序列出栈,如果栈为空之前,不能弹出任何元素,则第二个序列不是该栈的弹出序列。

从上往下打印二叉树:从上到下打印出二叉树的每个节点,同一层的结点按照从左到右顺序打印?

画个图尝试着去打印一些结点,可以想到用队列保存待打印的结点。从根节点出发,将队列的子节点顺序加入队列中,下面依次打印队列的首元素,并且每次将打印结点的子结点加入队列中。

二叉搜索树的后序遍历序列:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果?

对于二叉搜索树的后序遍历来说,根节点为最后一个结点,且左子树均小于根节点,右子树均大于根节点,所以很显然,对每一轮的子树进行判断时,只要判断左子树和右子树和子树根节点的大小关系是否合法即可。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2162次
    • 积分:58
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类