JAVA排序演算法實現代碼-二叉樹排序

來源:互聯網
上載者:User
 
JAVA排序演算法實現代碼-二叉樹排序
  1. /** 
  2.  * JAVA排序演算法實現代碼-二叉樹排序。 
  3.  *  
  4.  * @author 老紫竹 JAVA世紀網(java2000.net) 
  5.  *  
  6.  */  
  7. public class Test {  
  8.   public static int[] a = { 0, 10, 32, 1, 9, 5, 7, 12, 2, 4, 3 }; // 預設資料數組  
  9.   public static int[] Data = new int[20]; // 預設資料數組  
  10.   
  11.   public static void main(String args[]) {  
  12.     int i; // 迴圈計數變數  
  13.     int Index = 1; // 資料索引變數  
  14.     BNTreeArray BNTree = new BNTreeArray(); // 聲明二叉樹數組  
  15.   
  16.     Data[Index] = a[Index];  
  17.     BNTreeArray.TreeData[0] = Data[Index];  
  18.     Index++;  
  19.     for (i = 2; i < a.length; i++) {  
  20.       Data[Index] = a[Index];  
  21.       BNTree.Create(Data[Index]); // 建立二叉尋找樹  
  22.       Index++;  
  23.     }  
  24.   
  25.     // 排序前資料內容  
  26.     System.out.print("排序前 : ");  
  27.     for (i = 1; i < Index; i++)  
  28.       System.out.print(" " + Data[i] + " ");  
  29.     System.out.println("");  
  30.   
  31.     // 排序後結果  
  32.     System.out.print("排序後 : ");  
  33.     BNTreeArray.InOrder(0); // 中序遍曆  
  34.   }  
  35. }  
  36.   
  37. class BNTreeArray {  
  38.   public static int MaxSize = 20;  
  39.   public static int[] TreeData = new int[MaxSize];  
  40.   public static int[] RightNode = new int[MaxSize];  
  41.   public static int[] LeftNode = new int[MaxSize];  
  42.   
  43.   public BNTreeArray() {  
  44.     int i; // 迴圈計數變數  
  45.   
  46.     for (i = 0; i < MaxSize; i++) {  
  47.       TreeData[i] = 0;  
  48.       RightNode[i] = -1;  
  49.       LeftNode[i] = -1;  
  50.     }  
  51.   }  
  52.   
  53.   // ----------------------------------------------------  
  54.   // 建立二叉樹  
  55.   // ----------------------------------------------------  
  56.   public void Create(int Data) {  
  57.     int i; // 迴圈計數變數  
  58.     int Level = 0; // 樹的階層數  
  59.     int Position = 0;  
  60.   
  61.     for (i = 0; TreeData[i] != 0; i++)  
  62.       ;  
  63.   
  64.     TreeData[i] = Data;  
  65.     while (true) // 尋找節點位置  
  66.     {  
  67.       // 判斷是左子樹或是右子樹  
  68.       if (Data > TreeData[Level]) {  
  69.         // 右樹是否有下一階層  
  70.         if (RightNode[Level] != -1)  
  71.           Level = RightNode[Level];  
  72.         else {  
  73.           Position = -1; // 設定為右樹  
  74.           break;  
  75.         }  
  76.       } else {  
  77.         // 左樹是否有下一階層  
  78.         if (LeftNode[Level] != -1)  
  79.           Level = LeftNode[Level];  
  80.         else {  
  81.           Position = 1; // 設定為左樹  
  82.           break;  
  83.         }  
  84.       }  
  85.     }  
  86.   
  87.     if (Position == 1) // 建立節點的左右連結  
  88.       LeftNode[Level] = i; // 連結左子樹  
  89.     else  
  90.       RightNode[Level] = i; // 連結右子樹  
  91.   }  
  92.   
  93.   // ---------------------------------------------------------  
  94.   // 二叉樹中序遍曆  
  95.   // ---------------------------------------------------------  
  96.   public static void InOrder(int Pointer) {  
  97.     if (Pointer != -1) // 遍曆的終止條件  
  98.     {  
  99.       InOrder(LeftNode[Pointer]); // 處理左子樹  
  100.       // 處理列印節點內容  
  101.       System.out.print(" " + TreeData[Pointer] + " ");  
  102.       InOrder(RightNode[Pointer]); // 處理右子樹  
  103.     }  
  104.   }  
  105. }  
/** * JAVA排序演算法實現代碼-二叉樹排序。 *  * @author 老紫竹 JAVA世紀網(java2000.net) *  */public class Test {  public static int[] a = { 0, 10, 32, 1, 9, 5, 7, 12, 2, 4, 3 }; // 預設資料數組  public static int[] Data = new int[20]; // 預設資料數組  public static void main(String args[]) {    int i; // 迴圈計數變數    int Index = 1; // 資料索引變數    BNTreeArray BNTree = new BNTreeArray(); // 聲明二叉樹數組    Data[Index] = a[Index];    BNTreeArray.TreeData[0] = Data[Index];    Index++;    for (i = 2; i < a.length; i++) {      Data[Index] = a[Index];      BNTree.Create(Data[Index]); // 建立二叉尋找樹      Index++;    }    // 排序前資料內容    System.out.print("排序前 : ");    for (i = 1; i < Index; i++)      System.out.print(" " + Data[i] + " ");    System.out.println("");    // 排序後結果    System.out.print("排序後 : ");    BNTreeArray.InOrder(0); // 中序遍曆  }}class BNTreeArray {  public static int MaxSize = 20;  public static int[] TreeData = new int[MaxSize];  public static int[] RightNode = new int[MaxSize];  public static int[] LeftNode = new int[MaxSize];  public BNTreeArray() {    int i; // 迴圈計數變數    for (i = 0; i < MaxSize; i++) {      TreeData[i] = 0;      RightNode[i] = -1;      LeftNode[i] = -1;    }  }  // ----------------------------------------------------  // 建立二叉樹  // ----------------------------------------------------  public void Create(int Data) {    int i; // 迴圈計數變數    int Level = 0; // 樹的階層數    int Position = 0;    for (i = 0; TreeData[i] != 0; i++)      ;    TreeData[i] = Data;    while (true) // 尋找節點位置    {      // 判斷是左子樹或是右子樹      if (Data > TreeData[Level]) {        // 右樹是否有下一階層        if (RightNode[Level] != -1)          Level = RightNode[Level];        else {          Position = -1; // 設定為右樹          break;        }      } else {        // 左樹是否有下一階層        if (LeftNode[Level] != -1)          Level = LeftNode[Level];        else {          Position = 1; // 設定為左樹          break;        }      }    }    if (Position == 1) // 建立節點的左右連結      LeftNode[Level] = i; // 連結左子樹    else      RightNode[Level] = i; // 連結右子樹  }  // ---------------------------------------------------------  // 二叉樹中序遍曆  // ---------------------------------------------------------  public static void InOrder(int Pointer) {    if (Pointer != -1) // 遍曆的終止條件    {      InOrder(LeftNode[Pointer]); // 處理左子樹      // 處理列印節點內容      System.out.print(" " + TreeData[Pointer] + " ");      InOrder(RightNode[Pointer]); // 處理右子樹    }  }}

運行結果

排序前 : 10 32 1 9 5 7 12 2 4 3

排序後 : 1 2 3 4 5 7 9 10 12 32

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.