树的计数问题:具有n个结点的不同形态的树共有多少棵。即具有n个结点、互不相似的二叉树的数目bn。
二叉树的相似:两棵都为空树或者两棵都不是空树,而且它们的左右子树分别相似。
二叉树的等价:两者不仅相似,而且对应结点上的元素均相同。
二叉树在bn较小的时候形态和计数如下:
经过书上复杂的推导,含有n个结点的互不相似的二叉树个数为:
如果推广一下,不是二叉树而是树,则:
具有n个结点的互不相似的树的个数为tn = bn-1
即:
树的计数问题:具有n个结点的不同形态的树共有多少棵。即具有n个结点、互不相似的二叉树的数目bn。
二叉树的相似:两棵都为空树或者两棵都不是空树,而且它们的左右子树分别相似。
二叉树的等价:两者不仅相似,而且对应结点上的元素均相同。
二叉树在bn较小的时候形态和计数如下:
经过书上复杂的推导,含有n个结点的互不相似的二叉树个数为:
如果推广一下,不是二叉树而是树,则:
具有n个结点的互不相似的树的个数为tn = bn-1
即:
我们知道Linux的shell命令中,head能读取头几行,tail读取末尾几行。
如果我们有一个文件只有一行,但是这行很长。我们又想读取头几个字节,怎么办呢?
用cut -b:
#头三个字节
echo "abcdefg" | cut -b 1-3
abc
#第3个字节
echo "abcdefg" | cut -b 3
c
2013.09.05更新:
如果我们想从尾部开始截取,怎么办?
使用rev,反向命令。例如[......]
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
这种题是很无聊的,而且用istream什么就没有可以做的了,思路:倒着遍历字符串,查找到一个空格后,输出本空格与上次空格之间的内容。可以用\0临时替代printf。
代码如下:
#include <stdio.h>
#include <[......]
这里沿用传统二叉查找树(BST)的概念:所有左子树都小于根,右子树都大于根。(不止是直接孩子,还有间接孩子!)
现在给出一个整数序列,要求判断它是否是一棵二叉查找树BST的后序遍历结果。
如果去掉BST这个条件,我们一般是不能只根据后序遍历结果来确定某一棵树的。
有了BST这个条件后,我们可以这么做:
定义如下递归函数头:
int judge(int* arr, int start, int end)
(1)另root = end-1,则arr[root]为从star[......]