2009年7月28日 星期二

現場實作【建立二元樹及前序走訪、中序走訪、後序走訪】: 於C&C++程式設計基礎班與實務進階班+資料結構 完成

這個範例 建立二元樹及前序走訪、中序走訪、後序走訪,是我在 C&C++程式設計基礎班與實務進階班+資料結構 課程中先講解理論後,再輔以 樹狀圖形結構,並在課堂中撰寫完成(由無到有,一次OK喔^^),好讓學員可以知悉如何撰寫好的C&C++程式架構。高興的是全部學員都能理解並且聽懂如何建立二元樹及各種走訪。這一班的學員心得,請參考以下網址: http://tw.myblog.yahoo.com/yh-chiang/article?mid=691&prev=692&next=671


程式碼如下:


#include <stdio.h>
#include <stdlib.h>


struct Node
{
  int data;
  struct Node* L;
  struct Node* R;
};
struct Node* root;
void insertBTree( struct Node** ROOT, int d )
{  //insertBTree( &root, int d )
  if( *ROOT == NULL )  // first
  { struct Node* tmp;
    tmp = (struct Node*)malloc( sizeof(struct Node) );
    tmp->data = d;
    tmp->L = NULL;   tmp->R = NULL;
    *ROOT = tmp;
  }
  else if( d < (*ROOT)->data )
    insertBTree( &((*ROOT)->L) , d );
  else if( d > (*ROOT)->data )
    insertBTree( &((*ROOT)->R) , d );
}
void inOrder( struct Node* ROOT )
{
  if( ROOT != NULL )
  {
    inOrder( ROOT->L );
    printf( "%d\r\n", ROOT->data );
    inOrder( ROOT->R );
  }
}
void preOrder( struct Node* ROOT )
{
  if( ROOT != NULL )
  {
    printf( "%d\r\n", ROOT->data );
    preOrder( ROOT->L );
    preOrder( ROOT->R );
  }
}
void postOrder( struct Node* ROOT )
{
  if( ROOT != NULL )
  {
    postOrder( ROOT->L );
    postOrder( ROOT->R );
    printf( "%d\r\n", ROOT->data );
  }
}
int main(int argc, char *argv[])
{ int d;
  root = NULL;
  while( 1 )
  {
    printf( "Input a Value(0 is exit): " );
    scanf( "%d", &d );
    if( d == 0)  break;


    insertBTree( &root, d ); // 傳位址呼叫
  }
  printf( "Created a Tree...\r\n" );
  printf( "Print Tree by inorder\r\n" );
  inOrder( root ); // 傳值呼叫


  printf( "Print Tree by preOrder\r\n" );
  preOrder( root ); // 傳值呼叫


  printf( "Print Tree by postOrder\r\n" );
  postOrder( root ); // 傳值呼叫
  system( "PAUSE" );
  return 0;
}


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...