剑指Offer 24 二叉搜索树的后序遍历序列 题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路 后序遍历,最后一个数就是根节点,他的前面左部分,小于他的是左子树,大于他的是右子树;当满足后序遍历时,左子树在一边,右子树在另外一边;然后根节点向下移动;递归就出来了 根据上面说的,整个数组,和最后一个数比较的话,应该大于的在一边,小于在一边,所以我们可以逐个比较即可 more >> 2017-03-26 剑指Offer算法
剑指Offer 23 从上往下打印二叉树 题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路层序遍历二叉树;每一层从右开始输出;按照一般的遍历方法,左节点,右节点,那么在遍历左节点时,就应该将左节点的子节点保存下来,然后是右节点的子节点;然后统一输出;FIFO,先到先出即为队列; 定义一个队列,将根节点放进去; 当队列不为空的时候, 获取队列的顶部元素,即当前的节点;有左子节点,就把左节点放进队列,有右子节点,放右节点;输出当前根节点的值; more >> 2017-03-26 剑指Offer算法
剑指Offer 22 栈的压入,弹出序列 题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 思路 我们直接创建一个辅助栈,然后还原栈的压入和弹出,如果最后栈是空的,说明成功了 more >> 2017-03-25 剑指Offer算法
剑指Offer 21 包含min函数的栈 题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数 思路 不考虑时间复杂度的话,直接通过Iterator 找到栈的最小值; 如果考虑时间复杂度的话,就引入辅助栈,用于当前栈的最小值 more >> 2017-03-25 剑指Offer算法
剑指Offer 20 顺时针打印矩阵 题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: {1 2 3 4},{ 5 6 7 8},{ 9 10 11 12},{ 13 14 15 16} 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路 一圈一圈的话,从外向内是有停止条件的 对于内圈的话,是存在不完全打印的,需要进行判定 more >> 2017-03-25 剑指Offer算法