数据结构之二叉树 使用数组实现
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;
};
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; }
相关文章推荐
- C 数据结构使用数组和链表实现栈
- 数据结构与实现——数组、矩阵、链表、队列、栈、对象、二叉树和红黑树
- 数据结构与算法-----堆栈-使用数组(顺序结构)实现
- 数据结构与算法-----队列-使用数组(顺序结构)实现
- iOS:二叉树多级表格的使用,使用三方库TreeTableView-master实现对json解析数据的递归遍历整理成树状结构
- 使用js进行二叉树结构数据与数组结构数据的互相转化
- 数据结构 分别用递归和非递归方法实现二叉树先序,中序,后序遍历
- 补充-昨天使用二叉树存储数据的实现
- 数据结构之二叉树的Java实现
- 数据结构之二叉树的非递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 使用数组构建线性表的顺序表数据结构
- 数据结构基础之数组实现线性表各种操作
- 数据结构基础之数组实现线性表各种操作(二)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- 数据结构再学习--数组实现链表
- java 数组与链表的嵌套使用(数组链表--数据结构)
- 数据结构——排序/搜索二叉树(非递归)的基本操作实现
- 二叉树基础-二叉树类模板的实现(数据结构基础 第5周)