您的位置:首页 > 理论基础 > 数据结构算法

数据结构之二叉树 使用数组实现

2017-02-09 22:30 489 查看
二叉树可以使用数组简单的实现,其原理就是左右子节点和父节点的关系,  2*index + 1 为左节点,2*index + 2 为右节点

class Tree
{
public:
Tree(int size,int *pRoot);
~ Tree();
int *SearchNode(int nodeIndex);
bool AddNdode(int nodeIndex, int direction, int *pNode);
bool DeleteNode(int nodeIndex, int *pNode);
void TreeTraverse();
private:
int *m_pTree;
int m_Size;

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

Tree::Tree(int size, int *pRoot){
m_Size = 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;
m_pTree = NULL;
}
int *Tree::SearchNode(int nodeIndex){
if(nodeIndex<0 || nodeIndex >= m_Size)
return NULL;
if(m_pTree[nodeIndex] == 0)
return NULL;
return &m_pTree[nodeIndex];
}

bool Tree::AddNdode(int nodeIndex, int direction, int *pNode){
if(nodeIndex<0 || nodeIndex >= m_Size)
return false;
if(m_pTree[nodeIndex] == 0)
return false;
if(direction == 0){
if(nodeIndex*2+1 >= m_Size)
return false;
if(m_pTree[nodeIndex*2+1] != 0)
return false;
m_pTree[nodeIndex*2+1] = *pNode;

}

if(direction == 1){
if(nodeIndex*2+2 >= m_Size)
return false;
if(m_pTree[nodeIndex*2+2] != 0)
return false;

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

}
//cout<<*pNode<<endl;
return true;
}

bool Tree::DeleteNode(int nodeIndex, int *pNode){
if(nodeIndex<0 || nodeIndex >= m_Size)
return false;
if(m_pTree[nodeIndex] == 0)
return false;
*pNode = m_pTree[nodeIndex];
m_pTree[nodeIndex] = 0;
return true;

}

void Tree::TreeTraverse(){
for(int i = 0; i < m_Size; i++)
cout<<m_pTree[i]<<" ";
}
#include <iostream>
#include "Tree1.h"
#include <stdlib.h>

using namespace std;

int main(){
int root = 3;
Tree *pTree = new Tree(10, &root);
int node1 = 5;
int node2 = 8;
pTree->AddNdode(0,0,&node1);
pTree->AddNdode(0,1,&node2);
int node3 = 2;
int node4 = 6;
pTree->AddNdode(1,0,&node3);
pTree->AddNdode(1,1,&node4);
int node5 = 9;
int node6 = 7;
pTree->AddNdode(2,0,&node5);
pTree->AddNdode(2,1,&node6);
int node = 0;
pTree->DeleteNode(6,&node);
cout<<node<<endl;
pTree->TreeTraverse();
delete pTree;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐