图解数据结构9左偏树文档格式.docx
- 文档编号:19219874
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:10
- 大小:107.26KB
图解数据结构9左偏树文档格式.docx
《图解数据结构9左偏树文档格式.docx》由会员分享,可在线阅读,更多相关《图解数据结构9左偏树文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
<
stdio.h>
//
TreeNode
//////////////////////////////////////////////////////////////////////////
struct
TreeNode
{
TreeNode(int
iVal)
m_iData
=
iVal;
m_iDistance
0;
m_pLeft
m_pRight
}
~TreeNode()
void
SwapLeftRight()
*pTmp
m_pLeft;
m_pRight;
pTmp;
UpdateDistance()
GetRightDistance()+1;
int
GetLeftDistance()
return
m_pLeft!
=0?
m_pLeft->
m_iDistance:
-1;
GetRightDistance()
m_pRight!
m_pRight->
m_iData;
m_iDistance;
TreeNode*
};
Stack
class
public:
Stack(int
iAmount
10);
~Stack();
//return
1
means
succeeded,
0
failed.
Pop(TreeNode*
&
val);
Push(TreeNode*
Top(TreeNode*
//iterator
GetTop(TreeNode*
GetNext(TreeNode*
private:
TreeNode**
m_pData;
m_iCount;
m_iAmount;
m_iCurr;
Stack:
iAmount)
m_pData
new
TreeNode*[iAmount];
m_iCount
m_iAmount
iAmount;
m_iCurr
~Stack()
delete
val)
if(m_iCount>
0)
--m_iCount;
val
m_pData[m_iCount];
1;
if(m_iCount<
m_iAmount)
m_pData[m_iCount]
val;
++m_iCount;
m_iCount<
=m_iAmount)
m_pData[m_iCount-1];
-
if((m_iCurr-1)<
(m_iCount-1)
(m_iCurr-1)>
=0)
--m_iCurr;
m_pData[m_iCurr];
LeftistTree
LeftistTree();
~LeftistTree();
Dequeue(int&
iVal);
Enqueue(int
//returns
the
merged
root.
Merge(TreeNode
*pT1,
*pT2);
GetRoot();
#ifdef
_DEBUG
Print(TreeNode*
pNode);
#endif
protected:
*m_pRoot;
LeftistTree:
LeftistTree()
m_pRoot
NULL;
~LeftistTree()
Stack
st(40);
//2^40
must
be
enough.
//Postorder
traverse
tree
to
release
all
nodes.
*pNode
m_pRoot;
*pTemp;
if(pNode==0)
return;
while
(1)
if(pNode->
st.Push(pNode);
pTemp
pNode;
pNode
pNode->
pTemp->
continue;
if(0==st.Pop(pNode))
break;
if(m_pRoot==0)
iVal
m_pRoot->
Merge(m_pRoot->
m_pLeft,
m_pRight);
*pNew
TreeNode(iVal);
Merge(m_pRoot,
pNew);
*pT2)
if(pT1==0
pT2==0)
else
if(pT1==0)
//pT2!
=0
pT2;
if(pT2==0)
//pT1!
pT1;
if(pT1->
>
pT2->
m_iData)
Merge(pT2,
pT1);
pInsPos
pToIns
st.Push(pInsPos);
//Find
a
node
available
for
insert.
while
(1)
if(pInsPos->
=NULL)
if(pToIns->
pInsPos->
pTmp
pToIns;
else
//Insert
//Try
update
relative
distance
and
make
still
leftist
tree.
(0!
=st.Pop(pNode))
GetLeftDistance()
GetRightDistance())
SwapLeftRight();
UpdateDistance();
GetRoot()
pNode)
if(pNode!
=NULL
printf("
%d[%d]->
(%d,
%d)\n"
m_iData,
m_iDistance,
m_iData);
Print(pNode->
m_pLeft);
x)\n"
(x,
main(int
argc,
char*
argv[])
LeftistTree
tree;
tree.Enqueue(9);
tree.Enqueue(4);
tree.Enqueue
(2);
tree.Enqueue
(1);
tree.Enqueue(3);
tree.Enqueue(8);
tree.Print(tree.GetRoot());
tree.Dequeue(iVal);
\nDequeue
value
is
%d\n"
Dequeue
也许你还想问:
怎么你写的代码都不加个头啊,用来声明版权什么的。
本人似乎没这个习惯,那些东西繁琐得很,而且根据我多年开发经验,给每个cpp文件加个头其实是没有必要的,就好像注释,不需要的时候也生硬加上,那就是画蛇添足了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图解 数据结构 左偏树