這是個什么問題

Tree.h
#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;
};
#endifTree.cpp
#include<iostream>
#include"Tree.h"
using?namespace?std;
Tree::Tree(int?size,?int?*pRoot)
{
m_pTree?=?new?int[size];
m_iSize?=?size;
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)?//節點數值為0代表不存在該節點
return?NULL;
return?&m_pTree[nodeIndex];
}
/*
左子節點下標號是父節點下標號*2+1??右子節點是父節點下標號*2+2
*/
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?*?2?+?1]?!=?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?*?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;
}
void?Tree::TreeTraverse()
{
for?(int?i?=?0;?i?<?m_iSize;?i++)
{
cout?<<?m_pTree[i]?<<?"?";
}
}main.cpp
#include<iostream>
#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);
int?node?=?0;
pTree->DeleteNode(6,?&node);?
cout?<<"node="<<?node<<endl;
pTree->TreeTraverse();
cout?<<?endl;
int?*p=pTree->SearchNode(2);
cout?<<?*p;
delete[]pTree;
pTree?=?NULL;
system("pause");
return?0;
}
2017-07-09
main.cpp中,你定義的pTree是一個指針,不是數組指針,最后你刪除的時候就不用刪除數組噻,delete pTree就好了