剑指Offer 24 二叉搜索树的后序遍历序列

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路

  1. 后序遍历,最后一个数就是根节点,他的前面左部分,小于他的是左子树,大于他的是右子树;当满足后序遍历时,左子树在一边,右子树在另外一边;然后根节点向下移动;递归就出来了
  2. 根据上面说的,整个数组,和最后一个数比较的话,应该大于的在一边,小于在一边,所以我们可以逐个比较即可

    more >>

剑指Offer 23 从上往下打印二叉树

题目描述

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路

层序遍历二叉树;每一层从右开始输出;按照一般的遍历方法,左节点,右节点,那么在遍历左节点时,就应该将左节点的子节点保存下来,然后是右节点的子节点;然后统一输出;FIFO,先到先出即为队列;

定义一个队列,将根节点放进去; 当队列不为空的时候, 获取队列的顶部元素,即当前的节点;有左子节点,就把左节点放进队列,有右子节点,放右节点;输出当前根节点的值;

more >>

剑指Offer 22 栈的压入,弹出序列

题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

思路

  1. 我们直接创建一个辅助栈,然后还原栈的压入和弹出,如果最后栈是空的,说明成功了

    more >>

剑指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.

思路

  1. 一圈一圈的话,从外向内是有停止条件的
  2. 对于内圈的话,是存在不完全打印的,需要进行判定

    more >>