關于數據結構中的樹,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++)。這樣就好了