【排序】小白鼠再排队

题目

N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。 继续阅读【排序】小白鼠再排队

二叉树的相关操作

BiTree() { bt = Creat(bt); } //创建树
~BiTree() { ReleaseTree(bt); } //销毁树
void PreOrder() { PreOrder(bt); } //前序遍历
void InOrder() { InOrder(bt); } //中序遍历
void PostOrder() { PostOrder(bt); } //后序遍历
void levelOrder() { levelOrder(bt); }//层序遍历
void swapLR() { swapLR(bt); } //交换子树
int leafCount() { return leafCount(bt); } //计算叶子
int nodeCount() { return nodeCount(bt); } //计算结点
int highOfTree() { return highOfTree(bt); } //计算树高 继续阅读二叉树的相关操作

汉诺塔问题

描述

给定A、B、C三根足够长的细柱,在A柱上放有n个中间有孔的圆盘,共有n个不同的尺寸,现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An以及移动过程

输入盘子的个数输出移动的移动的路径和次数

样例输入

3

 

样例输出

move A->C
move A->B
move C->B
move A->C
move B->A
move B->C
move A->C
7

 

继续阅读汉诺塔问题

【二叉树】求层序二叉树LCA

如上图所示,由正整数1, 2, 3, …组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是(x1, x2, … ,1)和(y1, y2, … ,1)(这里显然有x = x1,y = y1),那么必然存在两个正整数i和j,使得从xi 和 yj开始,有xi = yj , xi + 1 = yj + 1, xi + 2 = yj + 2,… 现在的问题就是,给定x和y,要求xi(也就是yj)。输入输入只有一行,包括两个正整数x和y,这两个正整数都不大于1000。输出输出只有一个正整数xi。样例输入

10 4

样例输出

2

 

继续阅读【二叉树】求层序二叉树LCA