实验4:树与二叉树的实验

#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;
}

总结:

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

猜你喜欢

转载自blog.csdn.net/u011633428/article/details/80219084
今日推荐