手がかりツリーの手がかり化アルゴリズム
1279 ワード
厳格な「データ構造」という本では、使用されるコードにはいくつかの小さな問題がある.原版コードは添付されていません.主な問題は:
1.InThreading関数のパラメータは、preを携帯すべきであり、これは比較的深刻な問題であるべきである.preが携帯されていない場合、preの変更は呼び出した関数のローカル変数の値の変更にすぎず、元のpreの値には影響しません.
2.条件文でヒット確率の高い文を前にすると、コード効率が向上します.しかし,厳密なアルゴリズムではInOrderThreadingアルゴリズムではTをNULLとして前面に置いた.
3.InOrderThreadingでは、TがNULLの場合にのみ、Thrt->rchild=Thrtを実行することに意味があります.一方,TがNULLでない場合にはThrt->rchild=preを実行し,Thrt->rchild=Thrtの実行を開始しても上書きされるので,Thrt->rchild=Thrt文をelse節に移動する.
討論、批判と指摘を歓迎します.
ALex ZhonG
テキストリンク:http://blog.csdn.net/poechant/article/details/4811479
1.InThreading関数のパラメータは、preを携帯すべきであり、これは比較的深刻な問題であるべきである.preが携帯されていない場合、preの変更は呼び出した関数のローカル変数の値の変更にすぎず、元のpreの値には影響しません.
2.条件文でヒット確率の高い文を前にすると、コード効率が向上します.しかし,厳密なアルゴリズムではInOrderThreadingアルゴリズムではTをNULLとして前面に置いた.
3.InOrderThreadingでは、TがNULLの場合にのみ、Thrt->rchild=Thrtを実行することに意味があります.一方,TがNULLでない場合にはThrt->rchild=preを実行し,Thrt->rchild=Thrtの実行を開始しても上書きされるので,Thrt->rchild=Thrt文をelse節に移動する.
Status InOrderThreading(BiTree Thrt, BiTree T)
{
Thrt->LTag = Link;
Thrt->RTag = Thread;
if(T)
{
Thrt->lchild = T;
pre = Thrt;
InThreading(T, pre);
pre->RTag = Thread;
pre->rchild = Thrt;
Thrt->rchild = pre;
}
else
{
Thrt->lchild = T;
Thrt->rchild = Thrt;
}
}
void InTreading(BiTree p, BiTree pre)
{
if(p)
{
InThreading(p->lchild, pre);
if(!p->lchild)
{
p->LTag = Thread;
p->lchild = pre;
}
if(!pre->rchild)
{
pre->RTag = Thread;
p->rchild = p;
}
pre = p;
InThreading(p->rchild, pre);
}
}
討論、批判と指摘を歓迎します.
ALex ZhonG
テキストリンク:http://blog.csdn.net/poechant/article/details/4811479