ks17:アップルアルゴリズムbtree_test.c $のCAT /// ************************************** ************************************************************ /// @filename:btree_test.c /// @Brief:Bツリーを構築しようとすると、3つのトラバーサルを使用しますツリートラバーサルアルゴリズム /// /// /// @notice:アプリケーションスペースは、関数ポインタにする、割り当ての結果はNULLであるそうでない関数が返し、ポインタモードポインタに割り当てられ、返されていない層をパックする必要があります @author ///:kuang17 /// @Last更新日:2019年6月17日18時51分 /// ************************************************************ ************************************** の#include "stdio.hの" の#include「STDLIB。 H " の#include" string.hの「 ///定義構造 ツリーノード構造体のtypedef { データINT; TREENODE *親構造体; ツリーノード*のLCHをストラクト、 TREENODE * Rchの構造体; }ツリーノード。 typedefは構造体BtreeData { ツリーノード*ルートノード。 } Bツリー。 ///定义参数 構造体BtreeData * m_btree。 ///定义函数 のTreeNode * mallocNode(); int型initTree(Bツリー* BTREE、INT rootData)。 int型perorderTraversalTree(TreeNodeの*のPNODE)。 int型inorderTraversalTree(TreeNodeの* PNODE)。 postorderTraversalTree(ツリーノード* PNODE)をint型。 int型にaddNode(TreeNodeの*のparentNode、INTあるnewData); ///主函数 INTメイン(int型ARGC、チャー** ARGV) { int型originData [100] = {0、0、0}。 int型のカウント= 0; //初期化ツリー m_btree =(構造体BtreeData *)はmalloc(はsizeof(構造体BtreeData)); initTree(m_btree、ATOI(ARGV [1]))。 (m_btree->ルートノード!= NULL)の場合 printf( "ルートデータである:%Dを\ n"、m_btree-> rootNode->データ)。 //ツリー作成 チャー入力[12] = "{\ 0}"。 int型is_end = 1; (is_end)一方 { 取得(入力)。 printf(入力"入力%S \ nが")。 IF(strcmpの(入力、 "終了")== 0){ のprintf( "入力を終了します。\ n"); is_end = 0; }他{ //ツリーに追加し てaddNode(m_btree->ルートノード、ATOI(入力))。 originData [カウント++] = ATOI(入力)。 } } // perorderトラバーサル のprintf( "perorderトラバーサル: perorderTraversalTree(m_btree->ルートノード)。 printf( "トラバーサルINORDERます:\ n"); inorderTraversalTree(m_btree->ルートノード)。 //後順トラバーサル のprintf( "後順トラバーサルます:\ n"); postorderTraversalTree(m_btree->ルートノード)。 printf( "\のnoriginは次のとおりです。\ nを"); (; iがカウント<I ++は、I = 0をINT)のための { のprintf( "%d個の\ n"、originData [I])。 } のprintf( "終了する\ n"); } // *********************************************** ********************** /// @Brief mallocNode申请空间 /// /// @Returns // ********** ************************************************** ********* ツリーノード* newNode。 { newNode =(ツリーノード*)はmalloc(はsizeof(ツリーノード))。 newNode->データ= 0。 newNode->親= NULL; newNode-> LCH = NULL; newNode-> RCH = NULL; newNodeを返します。 } // *********************************************** ********************** /// @Brief initTree初始化树 /// /// @Param BTREE /// @Param rootData /// // / @Returns // ********************************************* ************************ INT initTree(Bツリー* Bツリー、INT rootData) { ツリーノード*ルートノード。 ルートノード= mallocNode()。 rootNode->データ=のrootData。 btree->ルートノード=ルートノード。 0を返します。 } // *********************************************** ********************** /// @BriefにaddNode添加节点 /// /// @ParamのparentNode /// @ParamあるnewData /// // / @Returns // ********************************************* ************************ INTにaddNode(ツリーノード*のparentNode、INTあるnewData) { ツリーノード* newNode。 newNode = mallocNode()。 newNode->データ=あるnewData; IF(あるnewData <= parentNode->データ) { のprintf( "親データである:%のD、LCHの\ nを追加"、parentNode->データ)。 (parentNode-> LCH == NULL)の場合 { //ここにのみ直接割り当てられていないのparentNode彼のノードの割り当てを与えます parentNode-> LCH = newNode。 }他 { にaddNode(parentNode-> LCH、あるnewData)。 } } (あるnewData> parentNode->データ)であれば { のprintf( "親データである:%のD、RCHの\ nを追加"、parentNode-を>データ) IF(parentNode-> RCH == NULL){ parentNode-> RCH = newNode。 } {他 にaddNode(parentNode-> RCH、あるnewData)。 } } 0を返します。 } // *********************************************** ********************** /// @Brief perorderTraversalTree先序遍历 /// /// @Param PNODE /// { /// @Returns // ************************************************ ********************* INT perorderTraversalTree(ツリーノード* PNODE) { IF(PNODE == NULL) 戻り0; perorderTraversalTree(pnode-> LCH); printf( "%d個の\ n"、pnode->データ)。 perorderTraversalTree(pnode-> RCH); 1を返します。 } // *********************************************** ********************** /// @Brief inorderTraversalTree中序遍历 /// /// @Param PNODE /// /// @Returns // ************************************************** ******************* int型inorderTraversalTree(TreeNodeの* PNODE) (PNODE == NULL)の場合 の戻り0; printf( "%d個の\ n"、pnode->データ)。 inorderTraversalTree(pnode-> LCH); inorderTraversalTree(pnode-> RCH); 1を返します。 } // *********************************************** ********************** /// @Brief postorderTraversalTree后序遍历 /// /// @Param PNODE /// /// @Returns // ************************************************** ******************* INT postorderTraversalTree(ツリーノード* PNODE) { IF(PNODE == NULL) 戻り0; postorderTraversalTree(pnode-> LCH); postorderTraversalTree(pnode-> RCH); printf( "%d個の\ n"、pnode->データ)。 1を返します。 }