数据结构
文章平均质量分 69
Bingo_12345
这个作者很懒,什么都没留下…
展开
-
字符串的排列(全排列,包含重复的字符)
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 void Per(int begin,string &str,vect原创 2015-09-07 17:07:04 · 2395 阅读 · 0 评论 -
输入两颗二叉树A,B,判断B是不是A的子结构。(树中可能有重复的值)
题目描述输入两颗二叉树A,B,判断B是不是A的子结构。步骤:本节点是不是与子树根节点相同,是:分别比较左右节点,否:本节点的左右子节点是否与子树根节点相同;最后没有找到相同的,返回false代码: bool BeOne(TreeNode* pRoot1,TreeNode* pRoot2){ if(pRoot2 ==NULL)原创 2015-09-06 10:08:23 · 988 阅读 · 0 评论 -
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路如下:后续遍历要求左子树大于根大于右子树,数组前半段小于最后一个元素,后半段大于最后一个元素,否则返回false;递归,检查所有子树(数组为空时返回false,递归前先检测子树是不是空)代码如下: boo原创 2015-09-06 15:27:43 · 3285 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:1、节点为空,直接返回2、节点不为空,把节点的数值压入路径中,如果节点的值等于路径剩余的值且是叶子节点,把该路径加入到路径集合中,并把路径中的该节点弹出;否则遍历左子树右子树(剩余的值为上一层值减去本节点的值),最原创 2015-09-06 20:26:31 · 479 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。思路:1、栈空时,压入一个;2、弹出序列第一个元素与栈顶元素比较,相同,则弹出一个,不相同再压入原创 2015-09-06 14:19:09 · 452 阅读 · 0 评论 -
复杂链表的复制(结点包含随机指针)
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。思路:1、在原链表上面复制,新节点连到相同的老结点后面;2、复制随机指针,老结点的随机指针(老结点后面的结点的随机指针指向,老结点随机指针所指节点的下一个结点)3、将两个链表分离,返回头指针;代码如下: RandomList原创 2015-09-07 13:29:11 · 819 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路一:(较麻烦)1、当前结点有左子树,则当前结点连接到左子树递归产生的双项链表的最后,返回本节点;2、当前结点有右子树,则当前结点连接到右子树递归产生的双项链表的最前,返回本节点;3、叶子结点直接返回本节点;注意:由原创 2015-09-07 16:00:29 · 450 阅读 · 0 评论 -
哈夫曼树
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结转载 2015-10-06 21:00:44 · 1529 阅读 · 0 评论