摘要: 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 解题思路 由于二叉搜索树具有以下性质:根节点大于左子树中所有结点,同时小于右子树中所有结点。所以可以先找到根结点然后划分左右子树判断是否符合。题中给了 阅读全文
posted @ 2018-04-13 15:07 FlyingWarrior 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解题思路 考虑分三步来复制复杂链表: 代码 阅读全文
posted @ 2018-04-13 11:33 FlyingWarrior 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 解题思路 二叉搜索树按照从小到大顺序输出的话正好是左子节点->根结点->右子节点这样的顺序,所以找到第k大的结点就是对二叉搜索树进行中序遍历,从 阅读全文
posted @ 2018-04-12 12:20 FlyingWarrior 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解题思路 注意到二叉树的前序遍历是从根节点开始,先遍历左子树再遍历右子树,由此可定义一种遍历顺序:先遍历根节点,再遍历右子树,最后是左子树,不妨称之为右序遍历。若该二叉树是对称的 阅读全文
posted @ 2018-04-12 10:59 FlyingWarrior 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路 分情况考虑如下: 若该节点为空,则直接返回NULL; 若该节点有右子树,则它的下一个节点一定是右子树中最左边的叶子节点,所以从该节点右孩子开始循 阅读全文
posted @ 2018-04-12 10:25 FlyingWarrior 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是 阅读全文
posted @ 2018-04-11 16:00 FlyingWarrior 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解题思路 由于两个数的拼接可能超过int范围,所以考虑用字符串来比较。每次决定两个数的位置时,首先把两个数n、m 阅读全文
posted @ 2018-04-11 15:06 FlyingWarrior 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入一个链表,反转链表后,输出链表的所有元素。 代码思路 要反转链表即要把每个节点的next指针反转,考虑下面的链表: 1 -> 2 -> 3 -> 4 第一次反转时若把2的next指针直接指向1,则会出现下列情况: 1 <- 2 3 -> 4 接下来再往下便访问不到3于是无法完成反转。所 阅读全文
posted @ 2018-04-07 19:56 FlyingWarrior 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 解题思路 可以用一个最大堆实现中位数左边的数据容器,最小堆实现右边的数据容器。为了保证数据平均分配到两 阅读全文
posted @ 2018-04-06 17:41 FlyingWarrior 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路 利用递归的思想,分别从两个链表的头节点开始,比较各自的值,并让新链表的头指针指向值较小的那个头结点。然后把值小的那个链表的头结点抽出,合并两个新链表并让头节点的next指针指向它。若碰到 阅读全文
posted @ 2018-04-06 11:30 FlyingWarrior 阅读(137) 评论(0) 推荐(0) 编辑