二叉树的数组存储实现-c++代码

  • 这个实现方法比较粗糙。将二叉树所有可能的位置按次序拍好,新建树时,如果某位置没有元素,则值为0,如果有元素,则值为传入的值。
  • 另外新赋值时,需要指定要在哪一个节点的左叉还是右叉插入什么值的指针?
  • 其他还有删除元素,在此代码中等价为将数组该处的值置为0。等
//.h文件
#pragma once
#include<iostream>
#define __debug__
using namespace std;
class Array
{
public:
	Array(int s);
	~Array();
	int get_node(int location);//根据索引寻找节点
	bool add_head(int* node);//头节点
	bool get_add(int location,int d, int* node);//添加元素
	bool get_delete(int location);//删除元素
	void traverse();//遍历
private:
	int s_size;
	int* pSize;
};

//.cpp文件
#include"Array.h"
Array::Array(int s)
{
	s_size = s;
	pSize = new int[s];
	for (int i = 0; i < s; i++)
	{
		pSize[i] = 0;
	}
}

Array::~Array()
{
	delete[]pSize;
	pSize = NULL;
}
bool Array::add_head(int* node)
{
	pSize[0] = *node;
	return true;

}//头节点

int Array::get_node(int location)
{
	if (location<0 || location>s_size)
	{
		return -1;
	}
	else if(pSize[location] == 0)
	{	
		return -1;
	}
	else
	{
		return pSize[location];
	}
}//根据索引寻找节点
bool Array::get_add(int location, int d, int* node)
{
	if (location<0 || location>= s_size)
	{
		return false;
	}
	else if (pSize[location] == 0)
	{
		return false;
	}
	else
	{
		if (d == 0)//左节点
		{
			if ((location * 2 + 1) >= s_size)
			{
				return false;
			}
			else if (pSize[location * 2 + 1] != 0)
			{
				return false;
			}
			else
			{
				pSize[location * 2 + 1] = *node;
				return true;
			}
		}
		else if (d == 1)//右节点
		{
			if ((location * 2 + 2) >= s_size)
			{
				return false;
			}
			else
			{
				pSize[location * 2 + 2] = *node;
				return true;
			}
		}
		return false;
	}

}//添加元素
bool Array::get_delete(int location)
{
	if (location<0 || location>= s_size)
	{
		return false;
	}
	else if (pSize[location] == 0)
	{
		return false;
	}
	else
	{
		pSize[location] = 0;
		return true;
	}
}//删除元素
void Array::traverse()
{
	for (int i = 0; i < s_size; i++)
	{
		cout << pSize[i] << endl;
	}
}//遍历
//main.cpp文件
#include"Array.h"

int main()
{
	Array *a=new Array(6);
	int m = 2;
	int m1 = 4;
	int m2 = 5;
	a->add_head(&m);
	a->get_add(0, 1, &m1);
	a->get_add(0, 0, &m2);
	//a->get_delete(1);
	int m5 = a->get_node(4);
	cout << m5 << endl;
	cout << endl;
	a->traverse();
	delete a;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值