数据结构--简单二叉树--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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43150428/article/details/82529808