1、创建文件ArrayTree.h 定义二叉树的数据结构
#ifndef ARRAYTREE_H
#define ARRAYTREE_H
class ArrayTree{
public:
ArrayTree(int size,int *pRoot);
~ArrayTree();
int *searchNode(int nodeIndex);
bool addNode(int nodeIndex,int direction,int *node);
bool delNode(int nodeIndex,int *node);
void treeTraverse();
private:
int *m_pTree;
int m_iSize;
};
#endif // ARRAYTREE_H
#include "ArrayTree.h"
#include <iostream>
using namespace std;
ArrayTree::ArrayTree(int size,int *pRoot){
m_iSize = size;
m_pTree = new int[m_iSize];
for(int i = 0 ;i < m_iSize;i++)
m_pTree[i] = 0;
m_pTree[0] = *pRoot;
}
ArrayTree::~ArrayTree(){
delete[] m_pTree;
m_pTree = NULL;
}
int* ArrayTree::searchNode(int nodeIndex){
if(nodeIndex < 0 || nodeIndex >= m_iSize)
return NULL;
if(m_pTree[nodeIndex] == 0)
return NULL;
return &m_pTree[nodeIndex];
}
/**
direction=1 表示将节点node添加到nodeIndex节点的左子树
direction=2 表示将节点node添加到nodeIndex节点的右子树
**/
bool ArrayTree::addNode(int nodeIndex,int direction,int *node){
if(nodeIndex < 0 || nodeIndex >= m_iSize)
return false;
int index = nodeIndex*2 + direction;
if(index >= m_iSize)
return false;
m_pTree[index] = *node;
return true;
}
/**
删除一个节点的时候要将他的子树也删除掉,但是此处并没有考虑
**/
bool ArrayTree::delNode(int nodeIndex,int *node){
if(nodeIndex < 0 || nodeIndex >= m_iSize)
return false;
if(m_pTree[nodeIndex] == 0)
return false;
*node = m_pTree[nodeIndex];
m_pTree[nodeIndex] = 0;
return true;
}
void ArrayTree::treeTraverse(){
for(int i = 0;i < m_iSize;i++){
cout<<m_pTree[i]<<",";
}
cout<<endl;
}
3、创建main.cpp 测试实现的数据结构
#include <iostream>
#include "ArrayTree.h"
using namespace std;
/**
二叉树的定义(数组表示)
bool createTree(Tree* pTree,Node *pRoot); //创建树
void destoryTree(Tree *pTree); //销毁树
Node* SearchNode(Tree *pTree,int nodeIndex);//根据节点索引寻找二叉树
bool addNode(Tree *pTree,int nodeInedx,int drirecton,Node *pNode);//添加节点
void deleteNode(Tree *pTree,int nodeIndex,Node *pNode);//删除节点
void treeTraverse(Tree *pTree); //遍历
int tree[n] 3 5 8 2 6 9 7
3[0] //左孩子的下标=父节点的下标*2 + 1
//右孩子的下标=父节点的下标*2 + 2
5[1] 8[2]
2[3] 6[4] 9[5] 7[6]
**/
/**节点的度就是节点的分支的个数**/
int main()
{
int root = 3;
ArrayTree *pTree = new ArrayTree(10,&root);
int n1 = 5;
int n2 = 8;
pTree->addNode(0,1,&n1);
pTree->addNode(0,2,&n2);
int n3 = 2;
int n4 = 6;
pTree->addNode(1,1,&n3);
pTree->addNode(1,2,&n4);
int n5 = 9;
int n6 = 7;
pTree->addNode(2,1,&n5);
pTree->addNode(2,2,&n6);
pTree->treeTraverse();
int temp;
pTree->delNode(6,&temp);
cout<<"temp:"<<temp<<endl;
pTree->treeTraverse();
int *node = pTree->searchNode(2);
cout<<"node:"<<*node<<endl;
delete pTree;
return 0;
}