数据结构与算法分析第八章Word文档下载推荐.docx
- 文档编号:18354830
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:17
- 大小:20.09KB
数据结构与算法分析第八章Word文档下载推荐.docx
《数据结构与算法分析第八章Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构与算法分析第八章Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
#ifndef__BINARY_TREE_H__
#define__BINARY_TREE_H__
#include<
assert.h>
crtdbg.h>
#ifdef_DEBUG
#defineDEBUG_NEWnew(_NORMAL_BLOCK,THIS_FILE,__LINE__)
#endif
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#ifndefASSERT
#defineASSERTassert
#else//not_DEBUG
#defineASSERT
#endif//_DEBUG
template<
typenameT>
classCBTNode
{
public:
Tdata;
CBTNode<
T>
*parent;
*left;
*right;
CBTNode(
Tdata=T(),
*parent=NULL,
*left=NULL,
*right=NULL
):
data(data),parent(parent),left(left),right(right){}
};
classCBTree
protected:
*m_pNodeRoot;
CBTree(CBTNode<
*initroot=NULL);
~CBTree();
voidAssignTo(CBTNode<
*p);
voidCopy(CBTree<
&
p);
private:
*Copy(CBTNode<
voidDestroyNode(CBTNode<
voidPreOrderTraverse(
constCBTNode<
*p,
void(*Visit)(constT&
data)
)const;
voidInOrderTraverse(
voidPostOrderTraverse(
voidGetNodesCount(constCBTNode<
*p,unsignedint*unCount)const;
voidGetLeafCount(constCBTNode<
T&
GetNodeData(CBTNode<
TGetNodeData(constCBTNode<
*p)const;
voidSetNodeData(CBTNode<
*p,constT&
data);
*&
GetRoot();
*GetRoot()const;
GetParent(CBTNode<
*GetParent(constCBTNode<
GetLeftChild(CBTNode<
*GetLeftChild(constCBTNode<
GetRightChild(CBTNode<
*GetRightChild(constCBTNode<
GetLeftSibling(CBTNode<
*GetLeftSiblig(constCBTNode<
GetRightSibling(CBTNode<
*GetRightSibling(constCBTNode<
intIsEmpty()const;
voidDestroy();
voidPreOrderTraverse(void(*Visit)(constT&
data))const;
voidInOrderTraverse(void(*Visit)(constT&
voidPostOrderTraverse(void(*Visit)(constT&
unsignedintGetNodesCount()const;
//Gethowmanynodes
unsignedintGetLeafCount()const;
unsignedintGetDepth()const;
unsignedintGetDepth(constCBTNode<
inlineCBTree<
:
CBTree(CBTNode<
*initroot):
m_pNodeRoot(initroot)
}
~CBTree()
Destroy();
inlinevoidCBTree<
AssignTo(CBTNode<
*p)
ASSERT(p);
m_pNodeRoot=p;
Copy(CBTree<
p)
if(NULL!
=p.m_pNodeRoot)
m_pNodeRoot=Copy(p.m_pNodeRoot);
else
m_pNodeRoot=NULL;
inlineCBTNode<
*CBTree<
Copy(CBTNode<
if(p)
{
*pNewNode=newCBTNode<
;
if(NULL==pNewNode)
returnNULL;
pNewNode->
data=p->
data;
parent=p->
parent;
left=Copy(p->
left);
right=Copy(p->
right);
returnpNewNode;
}
CBTree<
GetLeftChild(CBTNode<
return*(&
(p->
left));
GetLeftChild(constCBTNode<
*p)const
returnp->
left;
GetRightChild(CBTNode<
right));
GetRightChild(constCBTNode<
right;
GetLeftSibling(CBTNode<
if(p->
parent)
parent->
parent));
//returnNULL;
GetLeftSiblig(constCBTNode<
GetRightSibling(CBTNode<
GetRightSibling(constCBTNode<
GetParent(CBTNode<
GetParent(constCBTNode<
inlineT&
GetNodeData(CBTNode<
inlineTCBTree<
GetNodeData(constCBTNode<
SetNodeData(CBTNode<
p->
data=data;
inlineintCBTree<
IsEmpty()const
returnNULL==m_pNodeRoot;
GetRoot()
(m_pNodeRoot));
GetRoot()const
returnm_pNodeRoot;
DestroyNode(CBTNode<
DestroyNode(p->
deletep;
Destroy()
DestroyNode(m_pNodeRoot);
PreOrderTraverse(void(*Visit)(constT&
data))const
PreOrderTraverse(m_pNodeRoot,Visit);
PreOrderTraverse(
)const
Visit(p->
PreOrderTraverse(p->
left,Visit);
right,Visit);
InOrderTraverse(void(*Visit)(constT&
InOrderTraverse(m_pNodeRoot,Visit);
InOrderTraverse(
InOrderTraverse(p->
PostOrderTraverse(void(*Visit)(constT&
PostOrderTraverse(m_pNodeRoot,Visit);
PostOrderTraverse(
PostOrderTraverse(p->
inlineunsignedintCBTree<
GetNodesCount()const
unsignedintunCount;
GetNodesCount(m_pNodeRoot,&
unCount);
returnunCount;
GetNodesCount(
unsignedint*unCount
ASSERT(unCount);
unsignedintunLeftCount;
unsignedintunRightCount;
if(NULL==p)
*unCount=0;
elseif((NULL==p->
left)&
&
(NULL==p->
right))
*unCount=1;
GetNodesCount(p->
left,&
unLeftCount);
right,&
unRightCount);
*unCount=1+unLeftCount+unRightCount;
GetLeafCount()const
unsignedintunCount=0;
GetLeafCount(m_pNodeRoot,&
GetLeafCount(
//ifthenode'
sleft&
rightchildrenarebothNULL,itmustbealeaf
if((NULL==p->
++(*unCount);
GetLeafCount(p->
left,unCount);
right,unCount);
GetDepth()const
//Minus1herebecauseIthinktherootnode'
sdepthshouldbe0.
//So,don'
tdoitifuthinktherootnode'
sdepthshouldbe1.
returnGetDepth(m_pNodeRoot)-1;
GetDepth(constCBTNode<
unsignedintunDepthLeft;
unsignedintunDepthRight;
unDepthLeft=GetDepth(p->
unDepthRight=GetDepth(p->
return1+//ifdon'
tplus1here,thetree'
sdepthwillbealways0
(unDepthLeft>
unDepthRight?
unDepthLeft:
unDepthRight);
return0;
#endif//__BINARY_TREE_H__
测试代码:
btree.cpp
2005-1-1213:
17:
07
iostream>
#include"
btree.h"
usingnamespacestd;
//结点的数据类型
typedefcharElementType;
//回调函数:
Visit()=PrintElement()
staticvoidPrintElement(constElementType&
cout<
<
data;
intmain()
ElementType>
*pRoot;
*pLeftChild;
*pRightChild;
btree;
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
pRoo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 分析 第八