您的位置:首页 > Web前端 > Node.js

1115. Counting Nodes in a BST (30)解题报告

2016-12-31 16:44 381 查看
先构造BST,然后设置每一个结点的层数,然后统计最后两层的结点。

注意:静态变量的作用时间是从该语句开始运行到程序结束,作用域是该语句之后的函数内部。

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>

struct node {
int key, level;
node *parent, *lchild, *rchild;
};

node *insert(node *root, int key, node *parent);
int setlevel(node *root);
int cntn(node *root, int n);
int max(int n1, int n2, int n3);

int main(void)
{
int n, *arr, i, tmp;
node *root = nullptr;
scanf("%d", &n);
arr = new int
;
for (i = 0; i < n; i++) {
scanf("%d", arr + i);
}

for (i = 0; i < n; i++) {
root = insert(root, arr[i], nullptr);
}
int level, n1, n2;
level = setlevel(root);
n1 = cntn(root, level);
n2 = cntn(root, level - 1);
printf("%d + %d = %d\n", n1, n2 - n1, n2);
return 0;
}

node *insert(node *root, int key, node *parent) {
if (root) {
if (key <= root->key) {
root->lchild = insert(root->lchild, key, root);
}
else {
root->rchild = insert(root->rchild, key, root);
}
}
else {
root = new node;
root->key = key;
root->lchild = root->rchild = nullptr;
root->parent = parent;
}
return root;
}

int setlevel(node *root) {
if (root) {
if (root->parent) {
root->level = root->parent->level + 1;
}
else {
root->level = 0;
}
int llevel, rlevel;
llevel = setlevel(root->lchild);
rlevel = setlevel(root->rchild);
return max(root->level, llevel, rlevel);
}
else {
return 0;
}
}

int cntn(node *root, int n) {
static int cnt = 0;
if (root) {
if (root->level == n) {
cnt++;
}
cntn(root->lchild, n);
cntn(root->rchild, n);
}
return cnt;
}

int max(int n1, int n2, int n3) {
int tmp;
if (n1 > n2) {
tmp = n1;
}
else {
tmp = n2;
}
if (tmp > n3) {
return tmp;
}
else {
return n3;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: