資源簡(jiǎn)介
分層建立一個(gè)隨機(jī)層數(shù)及子節(jié)點(diǎn)的多叉樹(shù),并分層遍歷輸出,在都是奇數(shù)節(jié)點(diǎn)位置插入偶數(shù)節(jié)點(diǎn),輸出格式為樹(shù)狀

代碼片段和文件信息
#include?“StdAfx.h“
#include?“MyTree.h“
#define??MAX_CENG_SIZE 10 //允許最大層數(shù)
#define??MAX_NODE_SIZE 3 //允許最大節(jié)點(diǎn)數(shù)
#define??MAX_BUF_SIZE 20 //允許申請(qǐng)最大內(nèi)存空間
#define ?MAX_VALUE_SIZE 1000 //允許節(jié)點(diǎn)值的最大值
CMyTree::CMyTree(void)
{
m_pTreeRoot?=?NULL;
}
CMyTree::~CMyTree(void)
{
DeleteTree();
}
int?CMyTree::DeleteTree()
{
if?(!m_pTreeRoot)
return?0;
/////////////////////
//應(yīng)用隊(duì)列遍歷多叉樹(shù)依次刪除
queue?queueTree;
queueTree.push(m_pTreeRoot);
CTreeNode*?pNode?=?NULL;
while?(!queueTree.empty())
{
pNode?=?queueTree.front();
queueTree.pop();
if?(pNode->IsLeaf()) //刪除葉子節(jié)點(diǎn)
{
if?(!pNode->IsRoot())
{
CTreeNode*?pNodeParents?=?pNode->GetParents();
pNodeParents->DeleteChildrenNode(pNode);??//首先斷開(kāi)和父節(jié)點(diǎn)的鏈接
}
delete?pNode;
continue;
}
list*?treeNodeList?=?pNode->GetChildrenList();
list::iterator?ite;
for?(ite?=?treeNodeList->begin();?ite?!=?treeNodeList->end();?ite++)
{
queueTree.push(*ite);
}
}
m_pTreeRoot?=?NULL;
return?0;
}
int?CMyTree::CreatTree()
{
if?(m_pTreeRoot)
{
DeleteTree();
}
m_pTreeRoot?=?new?CTreeNode();
/////////////////////////////
//應(yīng)用2個(gè)隊(duì)列分層創(chuàng)建樹(shù)
queue?queueTree1;
queue?queueTree2;
queueTree1.push(m_pTreeRoot);
srand((unsigned)time(NULL));
int?nValue?=?rand()%MAX_VALUE_SIZE;
int?nBufSize?=?rand()%MAX_BUF_SIZE;
/////////////////////////////
//根節(jié)點(diǎn)設(shè)置數(shù)值及申請(qǐng)內(nèi)存
m_pTreeRoot->SetNodeValue(nValue);
m_pTreeRoot->SetBufSize(nBufSize);
int?nHeight?=?rand()%MAX_CENG_SIZE; //層數(shù)
for?(int?i?=?0;?i? {
queue?*pTempQueuePush?=?NULL;
queue?*pTempQueuePop?=?NULL;
if?(0?==?i%2)
{
pTempQueuePop?=?&queueTree1;
pTempQueuePush?=?&queueTree2;
}
else
{
pTempQueuePop?=?&queueTree2;
pTempQueuePush?=?&queueTree1;
}
while?(!pTempQueuePop->empty())
{
CTreeNode*?pTreeNode?=?pTempQueuePop->front();
pTempQueuePop->pop();
/////////////////////////////
//添加子節(jié)點(diǎn)
int?nChildrenNum?=?rand()%MAX_NODE_SIZE;
nChildrenNum?=?nChildrenNum?==?0???1?:?nChildrenNum;
for?(int?j?=?0;?j? {
CTreeNode*?pChildrenNode?=?new?CTreeNode();
int?nValue?=?rand()%MAX_VALUE_SIZE;
int?nBufSize?=?rand()%MAX_BUF_SIZE;
/////////////////////////////
//設(shè)置數(shù)值及申請(qǐng)內(nèi)存
pChildrenNode->SetNodeValue(nValue);
pChildrenNode->SetBufSize(nBufSize);
pTreeNode->InsertChildrenNode(pChildrenNode);
pTempQueuePush->push(pChildrenNode); //記錄當(dāng)前層的節(jié)點(diǎn)
}
}
}
return?0;
}
int?CMyTree::PrintTree()
{
if?(!m_pTreeRoot)
return?0;
stack?stackTree;???//?保存樹(shù)節(jié)點(diǎn)棧
map mapCengSize; //記錄棧中每層的節(jié)點(diǎn)數(shù)
int?nCengNum?=?0; //記錄當(dāng)前層數(shù)
mapCengSize.insert(map::value_type(0?1));
stackTree.push(m_pTreeRoot);
while(!stackTree.empty())
{
CTreeNode*?pNode?=?stackTree.top();
stackTree.pop();
map
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件???????7888??2011-08-24?13:03??myTreeApp\myTreeApp\Debug\BuildLog.htm
?????文件???????5732??2011-08-18?10:14??myTreeApp\myTreeApp\MyTree.cpp
?????文件????????452??2011-08-18?10:14??myTreeApp\myTreeApp\MyTree.h
?????文件????????285??2011-08-24?13:10??myTreeApp\myTreeApp\myTreeApp.cpp
?????文件???????4759??2011-08-17?17:19??myTreeApp\myTreeApp\myTreeApp.vcproj
?????文件???????1407??2011-08-24?13:10??myTreeApp\myTreeApp\myTreeApp.vcproj.RZ-PC.RZ.user
?????文件???????1427??2011-08-17?22:15??myTreeApp\myTreeApp\myTreeApp.vcproj.WWW-C6221ACAD07.Administrator.user
?????文件???????6023??2011-08-18?10:18??myTreeApp\myTreeApp\myTree_cpp.txt
?????文件????????533??2011-08-18?10:18??myTreeApp\myTreeApp\myTree_h.txt
?????文件???????1318??2011-08-17?17:14??myTreeApp\myTreeApp\ReadMe.txt
?????文件????????296??2011-08-17?17:14??myTreeApp\myTreeApp\stdafx.cpp
?????文件????????376??2011-08-17?17:14??myTreeApp\myTreeApp\stdafx.h
?????文件???????1499??2011-08-17?17:17??myTreeApp\myTreeApp\TreeNode.cpp
?????文件???????1634??2011-08-18?10:06??myTreeApp\myTreeApp\TreeNode.h
?????文件???????1517??2011-08-18?10:18??myTreeApp\myTreeApp\TreeNode_cpp.txt
?????文件???????1779??2011-08-18?10:18??myTreeApp\myTreeApp\TreeNode_h.txt
?????文件????????892??2011-08-17?17:14??myTreeApp\myTreeApp.sln
????..A..H.?????17920??2011-08-24?13:10??myTreeApp\myTreeApp.suo
?????目錄??????????0??2011-08-24?13:10??myTreeApp\myTreeApp\Debug
?????目錄??????????0??2011-08-24?13:10??myTreeApp\myTreeApp
?????目錄??????????0??2011-08-24?13:11??myTreeApp
-----------?---------??----------?-----??----
????????????????55737????????????????????21
評(píng)論
共有 條評(píng)論