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

本次实验中,针对树与二叉树的操作算法存在局限,仅适用于完全二叉树,可能导致空间浪费。实验未能实现输出所有叶子节点的功能,遇到无子节点情况时,输出孩子节点会出现随机值的问题。
摘要由CSDN通过智能技术生成
#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;
}

总结:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值