#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; }
总结:
该次试验的算法仅适合储存完全二叉树,否则可能会浪费很多空间,总结来说这次实验的缺点是不能输出该树的所有叶子节点,我仍未想到该算法,且当部分节点没孩子节点时,输出该节点的两个孩子节点的时候会出现随机值。