C言語は、バイナリツリートラバーサル、深さ、リーフ・ノードを作成します

はじめに:再びバイナリツリー、それを再読み込み、あなたが合格)、そのような時間は、ポインター(int型(類似のスワップ以来、int型Bに入ってくるのポインタを作成する理由として、多くの情報を、チェックするために、これらの日多くの問題を発見しましたbはb値から渡された関数ポインタを変更しない値であり、

これは、同じタイプがメインでBitNode *ポインタpを作成し、彼はNULLで、関数は一連の操作の終了を回復するために機能した後、あなたがポインタを渡す必要がありますので、機能外のpは、まだNULLで行わ合格作成します)Pのポインタ値を変更します

する#include <stdio.hに>
する#include <STDLIB.H>
のtypedef int型elemType;
typedefは構造体BitNode
{
elemTypeデータ、
構造体BitNode * Lchild、
構造体BitNode * Rchild;
} BitNode、* BiTree;
ボイドcreatBiTree(BiTree T *)、
ボイドTraverseBitree(BiTree T);
ボイドInOrderBitree(BiTree T);
ボイドPostOrderBitree(BiTree T);
INT leafCount(BiTree T、INT * NUM);
INT Treedeep(BiTree T);
ボイドPrintTree(BiTree T、INT H);
int型メイン()
{
BiTree T = NULL;
INT NUM = 0、ディープが;
のprintf( "最初のノードの値を入力するには、-1はリーフノードがないことを示す:\ N-");
creatBiTree(&T);
のprintf(「第一行きがけです: ");
TraverseBitree(T);
のprintf(" \ N- ");

printf( "先行順は以下のとおりです。");
InOrderBitree(T);
のprintf( "\ N-");

のprintf( "後順は次のとおりです。");
PostOrderBitree(T);
のprintf( "\ N-");

のprintf( "リーフノードがあります");
leafCount(T、&NUM);
のprintf( "\ N-");
のprintf(「リーフノードの数である:%D \ N-」、NUM);

ディープ= Treedeep(T)。
printf( "バイナリ深さは:D%\ N-"、深い)
深= 1;
PrintTree(T、深いです)。

}
//プレオーダーてバイナリツリーを作成
ボイドcreatBiTree(BiTree * T)
{
elemType CH;
scanfの( "%のD"、&CH);
IF(CH == -1)
{
* T = NULL;
}
そうでなければ
{
* T = (BiTree)はmalloc(はsizeof(BitNode))
IF終了(-1);((* T)!)
(* T) - >データ= CH;
のprintf( "%入力左の子ノードD:"、CH) ;
creatBiTree(&(* T) - > Lchild);
のprintf( "%dの右側の子の入力:"、CH);
creatBiTree(&(* T) - > Rchild);
}

}
//先序遍历
空隙TraverseBitree(BiTree T)
{
IF(!T = NULL)
{
のprintf( "%dの"、T->データ)。
TraverseBitree(T-> Lchild);
TraverseBitree(T-> Rchild);
}

}
// INORDERトラバーサル
ボイドInOrderBitree(BiTree T)
{
IF(T = NULL!)
{
InOrderBitree(T-> Lchild);
のprintf( "%のD"、T->データ);
InOrderBitree(T-> Rchild)。
}
}
//後続トラバーサル
ボイドPostOrderBitree(BiTree T)
{
IF(T = NULL!)
{
PostOrderBitree(T-> Lchild);
PostOrderBitree(T-> Rchild);
のprintf( "%のD"、T->データ)。
}
}
//リーフノード番号
leafCount INT(BiTree T、INT * NUM)
{

IFは(T!= NULL)
{
// IF(T-> Rchild-> T-データ== -1 &&> Lchild->データ== -1)//これは仕事をしない

場合(T-> Rchild == NULL && T-> Lchild == NULL)
{
(* NUM)++;
のprintf( "%のD"、T->データ); //リーフノード出力
}
leafCount(T-> Lchild、NUM);
leafCount(T- > Rchild、NUM);
}
//戻りNUM;
}
//バイナリツリーの深さ
Treedeep(BiTree T)INT
{
int型の深い= 0;
IF(T)
{
int型leftdeep Treedeep =(T-> Lchild);
INT = Treedeep rightdeep (T-> Rchild);
ディープ= leftdeep> = rightdeep leftdeep + 1:rightdeep + 1 ;?
}
ディープを返す;
}
//バイナリツリー印刷
ボイドPrintTree(BiTree Tをあなたの時間)
{
もし私。
もし(T == NULL)のリターン;
PrintTree(T-> Rchild、H + 1)。
用(; I <H; iが0 = I ++)
{
のprintf(」「)。
}
のprintf( "%D \ n"は、T->データ)。
PrintTree(T-> Lchild、H + 1)。
}

 

おすすめ

転載: www.cnblogs.com/cocobear9/p/12549673.html