剑指Offer试题总结(二)


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

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

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

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

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

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

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

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


阅读更多
上一篇剑指Offer试题总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭