關于數據結構中的樹,james老師的授課內容
我打印出來的是 3 5 8 2 6 9 0 0 0 0 120,后面有個120是怎么回事啊
#include<iostream>
#include<stdlib.h>?
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;//記錄數組的大小?
};
Tree::Tree(int?size,int?*pRoot)
{
m_iSize=size;?
m_pTree?=?new?int[size];//申請內存?
for(int?i;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_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]<<"?";
}
}
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();
int?*p=pTree->SearchNode(2);
cout<<endl;
cout<<"?node?="<<*p<<endl;
delete?pTree;
system("pause");
return?0;
}
2017-01-25
你的代碼在遍歷那里有錯啊,for(int?i=0;i<=m_iSize;i++)這里去掉等于號for(int?i=0;i<m_iSize;i++),還有構造函數那里for(int?i;i<size;i++)的i要初始化for(int?i=0;i<size;i++)。這樣就好了