剑指offer
huakaiba
这个作者很懒,什么都没留下…
展开
-
字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 思路:本质就是全排列的问题,具体思路见剑指offer的P155的那个图,主要就是采用循环递归的思想。 代码如下:原创 2015-08-08 11:30:02 · 338 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 思路:二叉搜索树变成排序的双向链表,即中序遍历,将树结构转为双向链表结构。具体见剑指offer的P152 代码如下: /** public class TreeNode { int val = 0; TreeNode left = n原创 2015-08-07 22:33:12 · 339 阅读 · 0 评论 -
复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。 思路:见剑指offer 代码如下: import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; public c原创 2015-08-07 21:20:49 · 239 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路:主要是根据根节点划后序遍历数组,分出左右子树,判断左右子树和根节点值的大小是否符合二叉搜索树的大小关系,并递归判断左右子树是否为二叉搜索树。依此为依据作为判断的结果,注意left=true初始化为true,因为左子树可能为空,这样不原创 2015-08-07 15:35:09 · 355 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
解题思路: 1、当输入的链表为空的时候直接返回空 2、当输入的k值大于链表的节点数的时候直接返回null; 3、先遍历链表得出链表的节点数,(注意;因为后面需要重新遍历链表查到倒数第k个节点,需要重新定义一个节点来保留head节点) 4、用节点数减去k就是链表的第几个节点,重新遍历链表找到节点返回(省了栈的空间) package com.dong.test; import ...原创 2019-03-25 21:45:34 · 576 阅读 · 0 评论