#include<math.h>
#include<iostream>
using namespace std;
class Tree
{
private:
public:
int x;
int a[6];
static int count;
Tree();
void Printtree();
void findpc();
void yezi(); //寻找叶子节点暂时没想到
};
int Tree::count = 0;
Tree::Tree()
{
int count = 0;
cout << "请输入6个数字" << endl;
for (int i = 0; i<6; i++)
{
cin >> x;
a[i] = x; count++;
if (x == 998)
a[i] = NULL;count++;
}
}
void Tree::Printtree()
{
cout << "输出全部节点" << endl;
int q;
for (q = 0; q<6; q++)
{
for (int k = 0; k < 9; k++) //k是层数
{
if (q == pow(2, k)-1)
cout << endl;
}
cout << a[q] << " ";
}
cout << endl;
}
void Tree::findpc()
{
cout << "输入要查找的节点的下标" << endl;
int xia;
cin >> xia;
if (xia >= 6 || xia < 0)
cout << "查找位置有误!" << endl;
else
{
cout <<"该节点信息为:" <<a[xia] << endl;
if (xia % 2 == 0) //下标为偶数
{
cout << "该点的双亲节点为:" << a[(xia /2)-1] << endl;
cout << "该点的孩子节点为:" << a[(xia + 1) * 2 - 1] << " " << a[(xia + 1) * 2] << endl;
}
if (xia % 2 == 1) //下标为几数
{
cout << "该点的双亲节点为:" << a[(xia + 1) / 2-1] << endl;
cout << "该点的孩子节点为:" << a[(xia + 1) * 2-1]<<" "<<a[(xia+1)*2]<< endl;
}
}
}
int main()
{
Tree tr;
tr.Printtree();
cout << endl;
tr.findpc();
return 0;
}
总结:
该次试验的算法仅适合储存完全二叉树,否则可能会浪费很多空间,总结来说这次实验的缺点是不能输出该树的所有叶子节点,我仍未想到该算法,且当部分节点没孩子节点时,输出该节点的两个孩子节点的时候会出现随机值。