标签:否则 alt 2.3 xtree 通过 vector detail 读取 完全二叉树
void trans(string exp,char post[])
作用:将输入的中缀表达式转换成后缀表达式。(直接把之前写过的题目的代码拿来修改使用,略过)。
void InitExpTree(BTree &T,string str) //建立二叉表达式树
首先将输入的中缀表达式 str 转换成后缀表达式 post ;建立一个结点栈。
遍历循环 post 数组:
如当前元素为数字,将其结点化,左右孩子置为空,存入结点栈;
如为符号,将其结点化,将栈中的第一、第二个结点弹出,成为符号结点的右、左孩子,再存入栈中。
最后取栈顶结点给 T
double EvaluateExTree(BTree T) //计算表达式树
当结点 T 不为空的时候,若结点 T 存放的是符号,则返回其左孩子与右孩子的符号运算结果(特殊情况:若符号为 / ,需判断其右孩子是否为 0 );若是数字,则返回数字。
BTree CreateBT(char a[],int i,int len) //完全二叉树层次顺序建立二叉树
如果当前数组元素为空或 i 大于等于 len (数组长度),返回空;
否则将当前数组元素存入新建结点,递归构建左、右孩子。
最后返回结点。
void GetWPL(BTree b,int h) //计算叶子结点带权路径长度,用全局变量 wpl 存放和
当结点存在时,若该结点为叶子结点,将其结点乘以高度存进 wpl ,递归左、右孩子。
priority_queue<int,vector<int>,greater<int> >Q;//优先队列存放元素
在队列中元素不为一时,循环将两个元素出队列,将他们的和放入 wpl ,再把这个和入队列。
最后输出 wpl
7-5 家谱处理(网上收集)
#include <stdio.h>
#include <string.h>
struct people {
int num;
char name[15];
char father[15];
}t1[101];
int main()
{
int n, m,i; char na[71];
scanf("%d %d", &n, &m);
getchar();
for (i=0;i<n;i++) {
t1[i].num = 0;
gets(na);
int l = strlen(na),j;
for (j = 0; j < l; j++) {
if (na[j] == ‘ ‘) t1[i].num++;
else {
strcpy(t1[i].name, na + j);
break;
}
}
if (!t1[i].num) strcpy(t1[i].father, "root");
else {
int k;
for (k = i-1; k >= 0; k--) {
if (t1[i].num>t1[k].num) {
strcpy(t1[i].father, t1[k].name);
break;
}
}
}
}//out
char a[15], b[10], c[15], d[10];
for (i = 0; i < m; i++) {
int k;
scanf("%s %s %s %s %s %s", &a, &d, &d, &b, &d, &c);
if (b[0] == ‘c‘) {
for (k = 0; k < n; k++) {
if (!strcmp(t1[k].name, a)) {
if (!strcmp(t1[k].father, c))
printf("True\n");
else printf("False\n");
break;
}
}
}
else if (b[0] == ‘p‘) {
for (k = 0; k < n; k++) {
if (!strcmp(t1[k].name, c)) {
if (!strcmp(t1[k].father, a))
printf("True\n");
else printf("False\n");
break;
}
}
}
else if (b[0] == ‘s‘) {
char num1[15], num2[15];
for (k = 0; k < n; k++) {
if (!strcmp(t1[k].name, a)) strcpy(num1, t1[k].father);
if (!strcmp(t1[k].name, c)) strcpy(num2, t1[k].father);
}
if(!strcmp(num1,num2)) printf("True\n");
else printf("False\n");
}
else if (b[0] == ‘a‘) {
char num1[15];
for (k = 0; k < n; k++)
if (!strcmp(t1[k].name, c)) strcpy(num1, t1[k].father);
while (strcmp(num1, a) && strcmp(num1, "root")) {
for (k = 0; k < n; k++)
if (!strcmp(t1[k].name, num1)) strcpy(num1, t1[k].father);
}
if(!strcmp(num1,"root")) printf("False\n");
else printf("True\n");
}
else if (b[0] == ‘d‘) {
char num1[15];
for (k = 0; k < n; k++)
if (!strcmp(t1[k].name, a)) strcpy(num1, t1[k].father);
while (strcmp(num1, c) && strcmp(num1, "root")) {
for (k = 0; k < n; k++)
if (!strcmp(t1[k].name, num1)) strcpy(num1, t1[k].father);
}
if (!strcmp(num1, "root")) printf("False\n");
else printf("True\n");
}
getchar();
}
return 0;
}
标签:否则 alt 2.3 xtree 通过 vector detail 读取 完全二叉树
原文地址:https://www.cnblogs.com/linyue711/p/8993642.html