int型数据的范围是
[
−
2
31
,
2
31
−
1
]
[-2^{31}, 2^{31}-1]
[−231,231−1],即
[
−
1
0
9
,
1
0
9
]
[-10^{9}, 10^{9}]
[−109,109];
long型数据的范围是
[
−
2
31
,
2
31
−
1
]
[-2^{31}, 2^{31}-1]
[−231,231−1];
long long型数据的范围是
[
−
2
63
,
2
63
−
1
]
[-2^{63}, 2^{63}-1]
[−263,263−1],即
[
−
1
0
18
,
1
0
18
]
[-10^{18}, 10^{18}]
[−1018,1018];
二叉树
结点:
struct node
{
int data;
node* lchild;
node* rchild;
};
层序遍历:
void BFS(node* root) {
queue<node*> q; // 队列里存地址
q.push(root); // 将根节点地址入队
while (!q.empty())
{
node* now = q.front(); // 访问队首元素
q.pop();
printf("%d ", now->data);
if (now->lchild != NULL) q.push(now->lchild); // 左子树非空
if (now->rchild != NULL) q.push(now->rchild); // 右子树非空
}
}
根据后序序列和中序序列重建二叉树:
后序序列最后一个元素为root,在中序序列中找到root,中序序列左边为左子树,右边为右子树,递归即可。
// 后序序列区间为[postL, postR], 中序序列区间为[inL, inR]
// 返回构建出的二叉树的根节点的地址
node* createTree(int postL, int postR, int inL, int inR) {
if (postL > postR) {
return NULL; // 递归终止条件
}
node* root = new node;
root->data = post[postR];
int k;
// 在中序序列中找root
for (k = inL; k <= inR; k++) {
if (in[k] == root->data) {
break;
}
}
int numLeft = k - inL; // 左子树的节点个数
root->lchild = createTree(postL, postL + numLeft - 1, inL, k - 1);
root->rchild = createTree(postL + numLeft, postR - 1, k + 1, inR);
return root;
}
数论
判断是否素数:
int isprime(int k){
int i;
int kk = (int)sqrt(k);
for (i = 2; i <= kk; i++){
if (k % i == 0){
break;
}
}
if (i <= kk){
return 0;
}
else{
return 1;
}
}