《数据结构之树篇》--二叉树的数组实现

来源:互联网 发布:java基础学完学什么 编辑:程序博客网 时间:2024/06/15 17:45

--头文件:

#pragma once#ifndef TREE_H_#define TREE_H_#include<iostream>using namespace std;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 // !TREE_H_

--CPP文件

#include "Tree.h"Tree::Tree(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;}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 >= m_iSize){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_iSize){return false;}if (m_pTree[nodeIndex * 2 + 2] != 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] << endl;}}


0 0