代码示例:
#ifndef TREE_H
#define TREE_H
class Tree
{
public:
Tree(int size,int*pRoot);//创建树
~Tree();//销毁树
int *SearchNode(int nodeIndex);//根据索引寻找结点
bool AddNode(int nodeIndex,int direction,int*pNode);//添加结点
bool DeleteNode(int nodeIndex,int*pNode);//删除结点
void TreeTraverse();//遍历节点结点
private:
int*m_pTree;
int m_iSize;
};
#endif
#include"Tree.h"
#include<iostream>
using namespace std;
Tree::Tree(int size ,int*pRoot)
{
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;
m_pTree=NULL;
}
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,int direction,int*pNode)
{
if(nodeIndex<0 || nodeIndex>=m_iSize)
{
return false;
}
if(m_pTree[nodeIndex]==0)
{
return false;
}
if(direction==0)
{
if(nodeIndex*2+1<0 || nodeIndex*2+1>=m_iSize)
{
return false;
}
if(m_pTree[nodeIndex]==0)
{
return false;
}
m_pTree[nodeIndex*2+1]=*pNode;
}
if(direction==1)
{
if(nodeIndex*2+2<0 || nodeIndex*2+2>=m_iSize)
{
return false;
}
if(m_pTree[nodeIndex]==0)
{
return false;
}
m_pTree[nodeIndex*2+2]=*pNode;
}
return true;
}
bool Tree::DeleteNode(int nodeIndex,int*pNode)
{
if(nodeIndex<0 || nodeIndex>=m_iSize)
{
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_iSize;i++)
{
cout<<m_pTree[i]<<",";
}
}
/*
二叉树(数组表示)
课程要求:完成树的基本操作
1、树的创建与销毁
2、树中结点的搜索
3、树中结点的添加与删除
4、树中结点的遍历
BOOL CreateTree(Tree**pTree,Node*pRoot);//创建树
void DestroyTree(Tree*pTree);//销毁树
Node*SearchNode(Tree*pTree,int nodeIndex);//根据索引寻找结点
BOOL AddNode(Tree*pTree,int nodeIndex,int direction,Node*pNode);//添加结点
BOOL DeleteNode(Tree*pTree,int nodeIndex,Node*pNode);//删除结点
void TreeTraverse(Tree*pTree);//遍历
关于数组与树之间的算法转换
int Tree[n] 3 5 8 2 6 9 7 父亲节点下标*2+1 该结点左
父亲节点下标*2+2 该结点右
3(0)
5(1) 8(2)
2(3) 6(4) 9(5) 7(6)
*/
#include<iostream>
#include<stdlib.h>
#include"Tree.h"
using namespace std;
int main(void)
{
int root=3;
Tree *pTree= new Tree(10,&root);
int node1=5;
int node2=8;
pTree->AddNode(0,0,&node1);
pTree->AddNode(0,1,&node2);
int node3=2;
int node4=6;
pTree->AddNode(1,0,&node3);
pTree->AddNode(1,1,&node4);
int node5=9;
int node6=7;
pTree->AddNode(2,0,&node5);
pTree->AddNode(2,1,&node6);
pTree->TreeTraverse();
int *p=pTree->SearchNode(2);
cout<<endl<<"node="<<*p<<endl;
int temp=0;
pTree->DeleteNode(6,&temp);
cout<<"delete ="<<temp<<endl;
pTree->TreeTraverse();
delete pTree;
pTree=NULL;
system("pause");
return 0;
}
打印结果: