手がかりツリーの手がかり化アルゴリズム

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節に移動する.
 
 
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