树的双亲表示法
#include <stdio.h>
#include <iostream>
using namespace std;
#define MAX_TREE_SIZE 100
typedef struct{
int data;
int parent;
} PNode;
typedef struct{
PNode nodes[MAX_TREE_SIZE];
int length;
} PTree;
bool find_data(PTree &ptree, int value){
int k = 0;
while (k<ptree.length) {
if (ptree.nodes[k].data == value) {
return true;
}
k++;
}
return false;
}
void find_parent(PTree ptree, int value){
int k = 0;
while (k<ptree.length) {
if (ptree.nodes[k].data == value && ptree.nodes[k].parent != -1) {
cout << value << "他的老爸是:" << ptree.nodes[k].parent << endl;
break;
}
k++;
}
if (k>=ptree.length) {
cout << value << "他没有老爸" << endl;
}
return ;
}
void print_data(PTree ptree){
int i = 0;
cout << "length:" << ptree.length <<endl;
while (i<ptree.length) {
cout << "nodes[" << i << "]:" << ptree.nodes[i].data << " " << ptree.nodes[i].parent << endl;
i++;
}
}
void init_data(PTree &ptree){
ptree.nodes[0].data = 0;
ptree.nodes[0].parent = -1;
ptree.length = 1;
int value, parent;
print_data(ptree);
printf("请输入结点的值, 还有他老爸的位置:\n");
while(scanf("%d%d",&value, &parent)){
if (!find_data(ptree, parent)) {
print_data(ptree);
printf("数组没有这个父亲结点,请重新请输入结点的值, 还有他老爸的位置:\n");
continue;;
}
ptree.nodes[ptree.length].data = value;
ptree.nodes[ptree.length].parent = parent;
ptree.length++;
}
}
bool set_data(PTree &ptree){
return true;
}
int main(){
std::cout << "welcome, to my world!" << std::endl;
PTree ptree;
cout << "size of:" << sizeof(ptree) <<endl;
init_data(ptree);
print_data(ptree);
find_parent(ptree, 0);
find_parent(ptree, 1);
find_parent(ptree, 2);
return 0;
}