Artificial Intelligence Programming Lab(AIPLab) 討論區

Please login or register.

請輸入帳號, 密碼以及預計登入時間

新聞:

[慶賀]恭喜亞大獲《泰晤士報》亞洲最佳大學排名第83名,國內排名第十名-20170201

作者 主題: Ex-C5-二元搜尋樹(Binary Search Tree)-20150824  (閱讀 2634 次)

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1868
    • 檢視個人資料
Ex-C5-二元搜尋樹(Binary Search Tree)-20150824
« 於: 八月 24, 2015, 02:18:44 am »
使用鏈結串列定義一個二元搜尋樹
插入20個資料項到這個樹。
使用前序(Pre-order)列印出整個二元搜尋樹
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1868
    • 檢視個人資料
回覆: Ex-C5-二元搜尋樹(Binary Search Tree)-20150824
« 回覆文章 #1 於: 八月 24, 2015, 02:19:19 am »
程式碼: [Select]
#include <stdio.h> //標準輸出入函數的標頭檔
#include <stdlib.h>
typedef struct node//節點結構的自定型別定義
{
    int data;//整數
    struct node *left;//節點的指標
    struct node *right;//節點的指標
} Node;
Node* NewNode()
{
    Node *newNode = malloc(sizeof(Node));//新節點(node)
    newNode->data = 0;
    newNode->left = NULL;
    newNode->right = NULL;
    return  newNode;
}
void Travel(Node* curNode)
{
     if (curNode==NULL)
        return;
     Travel(curNode->left);//走訪左子樹
     printf("%3d ", curNode->data);//走訪樹根
     Travel(curNode->right);//走訪右子樹
}
int main(int argc, char *argv[])//
{//程式寫在main()函數裡
    Node* Tree = NewNode();
    Node* curNode = NULL;
    int i, newdata;
    srand( (unsigned) time( NULL ) );//srand()是產生亂數的種子
    //插入20個資料項到這個樹
    newdata = rand()%100;
    Tree->data = newdata;
    for (i=1; i< 20; i++)
    {
        newdata = rand()%100;
        curNode = Tree       
        while (1)
        {
              if (newdata < curNode->data)
              {
                 if (curNode->left == NULL)
                 {
                     curNode->left = NewNode();
                     curNode->left->data = newdata;
                     break;                               
                 }
                 else
                     curNode = curNode->left;
              }
              else
              {
                 if (curNode->right == NULL)
                 {
                     curNode->right = NewNode();
                     curNode->right->data = newdata;
                     break;                                   
                 }
                 else
                     curNode = curNode->right;
              }
        }       
    }
    //使用中序列印出整個二元搜尋樹
    Travel(Tree);
    return 0;
}
已記錄
 

SimplePortal Classic 2.0.5