严蔚敏视频 笔记23
二、输出所有从根结点到叶子结点的路径
void AllPath(Bitree T,Stack &S) {
// 输出二叉树上从根到所有叶子结点的路径
if(T) {
Push(S,T->data);
if(!T->Left&&!T->Right) PrintStack(S);
else {
AllPath(T->Left,S);
AllPath(T->Right,S);
}
Pop(S);
}
}
void OutPath(Bitree T,Stack& S) {
// 输出森林中所有从根到叶子的路径
while(!T) {
Push(S,T->data);
if(!T->lchild) PrintStack(S);
else OutPath(T->lchild,S);
Pop(S);
T=T->rchild;
}
}
三、建树的存储结构的算法
void CreatTree(CSTree &T) {
T=NULL;
for(scanf(&fa,&ch);ch!=' ';scanf(&fa,&ch)) {
p=GetTreeNode(ch);
EnQueue(Q,p);
if(fa==' ') T=p;
else {
GetHead(Q,s);
while(s->data!=fa) {
DeQueue(Q,s);
GetHead(Q,s);
}
if(!(s->firstchild)) {
s->firstchild=p;
r=p;
}
else {
r->nextsibling=p;
r=p;
}
}
}
}
6.8 哈夫曼树与哈夫曼编码
最优树的定义
结点的路径长度:从根结点到该结点路径上分支的数目
树的路径长度:树中每个结点的路径长度之和
树的带权路径长度:树中所有叶子结点带权路径长度之和
WPL(T)=Σwklk
在所有含n个叶子结点,并带相同权值的m叉树中,必存在一棵其带权路径长度取最小值的树,称为“最优树”