1. 程式人生 > >有序陣列轉化為二叉樹 C++

有序陣列轉化為二叉樹 C++

http://blog.csdn.net/fanzitao/article/details/8031946

這個題目有點模稜兩可,只說轉化成二叉樹。也沒有說平衡二叉樹,二叉排序樹。

如果只是隨便什麼二叉樹都可以,把就用陣列作為輸出,隨便是前序,中序,還是後續構建二叉樹都可以,網上二叉樹建立的程式碼一大堆。

下面程式碼是簡歷一棵二叉排序樹。

首先用陣列的中間元素作為根建立二叉樹,然後遞迴簡歷左子樹,右子樹。

  1. #include<iostream>
  2. #include<queue>
  3. #include<windows.h>
  4. usingnamespace std;  
  5. typedefstruct node{  
  6.         int data;  
  7.         struct node *left;  
  8.         struct node *right;  
  9. }Node,*Bitree;  
  10. void buildTree(Bitree &T,int a[],int begin,int end)//建立二叉排序樹
  11. {  
  12.     if(begin>end)//遞迴的出口
  13.                  return;  
  14.     int mid = (begin+end)/2;//中間元素的下標
  15.     if(T==NULL)//為當前樹的根節點申請空間
  16.     {            
  17.                T = (Node *)malloc(sizeof(Node));  
  18.                T->data = a[mid];//賦值
  19.            T->left = NULL;//左右子樹也要置為NULL
  20.            T->right = NULL;  
  21.     }  
  22.     cout<<a[mid]<<" ";//下面2行為了方便看建立的過程
  23.     Sleep(1000);  
  24.     buildTree(T->left,a,begin,mid-1);//遞迴簡歷左子樹
  25.     buildTree(T->right,a,mid+1,end);//遞迴建立右子樹
  26. }  
  27. void travel(Bitree T)  
  28. {  
  29.      if(T != NULL)  
  30.      {  
  31.                         travel(T->left);  
  32.             cout<<T->data<<" ";//中序遍歷
  33.                         travel(T->right);  
  34.      }  
  35. }  
  36. int main()  
  37. {  
  38.     int a[] = {1,2,3,4,5,6,7,8,9};  
  39.     Bitree root = NULL;  
  40.     int begin = 0, end = 8;  
  41.     buildTree(root,a,begin,end);  
  42.     cout<<endl;   
  43.     travel(root);  
  44.     getchar();  
  45.     return 0;  
  46. }