数据结构-数组二叉树-【C++实现】

    本二叉树是索引0开始为头数据节点,则*2+1为其左孩子,*2+2为右孩子。数组中元素值为0该节点为空。代表亲测可运行。

Tree.h

#pragma once

class Tree
{
public:
	Tree(const int &pRoot,int size);//传递初始头数据节点的值与容量
	~Tree();
	int SearchNode(int nodeIndex);
	bool AddNode(int nodeIndex, bool direction, const int & pNode);//direction = false 表示左孩子,true表示右孩子
	bool DeleteNode(int nodeIndex);
	void TreeTraverse();

private:
	int * m_pTree;//以索引0开始为头数据节点
	int m_iSize;//记录二叉树大小
};

Tree.cpp

#include<iostream>
#include"Tree.h"

using namespace std;

Tree::Tree(const int &pRoot,int size)
{
	m_iSize = size;
	m_pTree = new int[size];
	for (int i = 0; i < size; i++)
		m_pTree[i] = 0;
	m_pTree[0] = pRoot;
}

Tree::~Tree()
{
	delete[] m_pTree;
}

int Tree::SearchNode(int nodeIndex)
{
	if (nodeIndex < 0 || nodeIndex >= m_iSize)
		return NULL;
	if (m_pTree[nodeIndex] == 0)
		return NULL;

	return m_pTree[nodeIndex];
}

bool Tree::AddNode(int nodeIndex, bool direction,const int & pNode)
{
	if (nodeIndex < 0 || nodeIndex >= m_iSize)
		return false;
	if (m_pTree[nodeIndex] == 0)
		return false;

	if (!direction)//插入左孩子
	{
		if (nodeIndex * 2 + 1 >= m_iSize)//越界
			return false;
		if (m_pTree[nodeIndex * 2 + 1] != 0)//本身已有左节点
			return false;

		m_pTree[nodeIndex * 2 + 1] = pNode;
	}

	if (direction)//插入右孩子
	{
		if (nodeIndex * 2 + 2 >= m_iSize)//越界
			return false;
		if (m_pTree[nodeIndex * 2 + 2] != 0)//本身已有左节点
			return false;

		m_pTree[nodeIndex * 2 + 2] = pNode;
	}

	return true;
}

bool Tree::DeleteNode(int nodeIndex)
{
	if (nodeIndex < 0 || nodeIndex >= m_iSize)
		return false;
	if (m_pTree[nodeIndex] == 0)
		return false;

	m_pTree[nodeIndex] = 0;
	return true;
}

void Tree::TreeTraverse()
{
	for (int i = 0; i < m_iSize; i++)
	{
		cout << m_pTree[i] << " ";
	}
}

main.cpp

#include<iostream>
#include"Tree.h"
using namespace std;

/*建立如图所示树
			3(0)
	  5(1)		   8(2)
  2(3)   6(4)   9(5)   7(6)
*/

int main()
{
	Tree * pTree = new Tree(3,10);

	pTree->AddNode(0, 0, 5);
	pTree->AddNode(0, 1, 8);
	pTree->AddNode(1, 0, 2);
	pTree->AddNode(1, 1, 6);
	pTree->AddNode(2, 0, 9);
	pTree->AddNode(2, 1, 7);

	//pTree->DeleteNode(5);

	pTree->TreeTraverse();
	cout << endl;

	cout << "Node 5 value is : " << pTree->SearchNode(5) << endl;

	delete pTree;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/majichen95/article/details/80270124