数据结构--简单二叉树--c++实现
**
tree.h
**
#ifndef tree_h
#define tree_h
class Tree
{
public:
Tree(int size,int *root);
~Tree();
int *searchNode(int nodeIndex);
bool addNode(int nodeIndex,int direction,int *node);
bool deleteNode(int nodeIndex,int *node);
void treeTraverse();
private:
int _size;
int *_tree;
};
#endif
**
tree.cpp
**
#include "tree.h"
#include <iostream>
using namespace std;
Tree::Tree(int size,int *root)
{
_size = size;
_tree = new int[_size];
for (int i = 0;i<_size;i++)
{
_tree[i] = 0;
}
_tree[0] = *root;
}
Tree::~Tree()
{
delete []_tree;
_tree = nullptr;
}
int *Tree::searchNode(int nodeIndex){
if (nodeIndex<0||nodeIndex>=_size)
{
return NULL;
}
if (_tree[nodeIndex] == 0)
{
return NULL;
}
return &_tree[nodeIndex];
}
bool Tree::addNode(int nodeIndex,int direction,int *node){
if (nodeIndex<0||nodeIndex>=_size)
{
return false;
}
if (_tree[nodeIndex] == 0)
{
return false;
}
if (direction == 0)
{
if (nodeIndex*2+1<0||nodeIndex*2+1>=_size)
{
return false;
}
if (_tree[nodeIndex] == 0)
{
return false;
}
_tree[nodeIndex*2+1] = *node;
}
if (direction == 1)
{
if (nodeIndex*2+2<0||nodeIndex*2+2>=_size)
{
return false;
}
if (_tree[nodeIndex] == 0)
{
return false;
}
_tree[nodeIndex*2+2] = *node;
}
return true;
}
bool Tree::deleteNode(int nodeIndex,int *node){
if (nodeIndex<0||nodeIndex>=_size)
{
return false;
}
if (_tree[nodeIndex] == 0)
{
return false;
}
*node = _tree[nodeIndex];
_tree[nodeIndex] = 0;
return true;
}
void Tree::treeTraverse(){
for (int i = 0;i<_size;i++)
{
cout<<_tree[i]<<" ";
}
cout<<endl;
}
**
demo.cpp
**
#include "tree.h"
#include <iostream>
using namespace std;
int main(){
int node1 = 1;
int node2 = 2;
int node3 = 3;
int node4 = 4;
int node5 = 5;
int node6 = 6;
int node7 = 7;
int root = 1;
Tree *p = new Tree(10,&root);
p->addNode(0,0,&node2);
p->addNode(0,1,&node3);
p->addNode(1,0,&node4);
p->addNode(1,1,&node5);
p->addNode(2,0,&node6);
p->addNode(2,1,&node7);
int *pp = p->searchNode(5);cout<<*pp<<endl;
p->treeTraverse();
int node = 0;
p->deleteNode(6,&node);cout<<"node: "<<node<<endl;
delete p;
p = NULL;
system("pause");
return 0;
}