ChenGen

          一切歸零,重新開始
          隨筆 - 13, 文章 - 10, 評論 - 21, 引用 - 0
          數據加載中……

          復習二叉排序樹

          ???二叉排序數是一種很重要的數據結構,今天復習了一下如何創建一棵二叉排序數&二叉排序數的兩種中序遍歷方法——遞歸中序遍歷&非遞歸的中序遍歷。

          ???宏定義&頭文件:

          #include? " stdio.h "
          #include?
          " stdlib.h " ? /* 內存分配*/
          #include? " ctype.h " ? /* 字符操作*/
          #define?MAXNUM? 100 ? /* 非遞歸時的棧的大小*/


          ???數據結構:

          typedef?struct?node {
          ????
          int ?data;
          ????struct?node?
          * left;
          ????struct?node?
          * right;
          }
          ?Node;

          ???生成一棵二叉排序數:???
          Node?*CreateTree()
          {
          ????
          int?p,data;
          ????
          char?buffer[100],ch;
          ????Node?
          *head;
          ????head
          =NULL;????/*This?is?very?important!*/
          ????
          while((ch=getchar())!=EOF){
          ????????p
          =0;
          ????????
          if(isspace(ch))?/*過濾空格*/
          ????????????
          continue;
          ????????
          else?if(isdigit(ch)){
          ????????????buffer[p
          ++]=ch;
          ????????????
          for(ch=getchar();isdigit(ch);ch=getchar())
          ????????????????buffer[p
          ++]=ch;
          ????????????ungetc(ch,stdin);
          ????????????buffer[p]
          ='\0';
          ????????????data
          =atoi(buffer);?/*將字符串轉化為整數*/
          ????????}

          ????????InsertNode(
          &head,data);/*向樹中插入一個結點*/
          ????}

          ????
          return?head;
          }


          void?InsertNode(Node?**head,int?data)
          {
          ????
          if(*head==NULL){?/*如果結點為空,正是要插入的位置*/
          ????????
          *head=(Node?*)malloc(sizeof(Node));
          ????????(
          *head)->data=data;
          ????????(
          *head)->left=NULL;
          ????????(
          *head)->right=NULL;
          ????}

          ????
          else{
          ????????
          if(data<(*head)->data)?InsertNode(&((*head)->left),data);/*插入左子樹*/
          ????????
          else?InsertNode(&((*head)->right),data);/*插入右子樹*/
          ????}

          }

          ???二叉排序數的遞歸中序遍歷:
          void?MidTravel(Node?*head)
          {
          ????
          if(head){
          ????????MidTravel(head
          ->left);?/*遍歷左子樹*/
          ????????printf(
          "%d\t",head->data);?/*輸出結點值*/
          ????????MidTravel(head
          ->right);?/*遍歷又子樹*/
          ????}

          }

          ???二叉排序數的非遞歸遍歷:
          void?MidTravel2(Node?*p)
          {
          ????Node?
          *a[MAXNUM];?/**/
          ????
          int?top;?/*棧頂*/
          ????top
          =0;
          ????
          while(p?||?top){
          ????????
          while(p){
          ????????????
          if(top==MAXNUM)?{
          ????????????????printf(
          "over?flow\n");
          ????????????????exit(
          -1);
          ????????????}

          ????????????a[top
          ++]=p;?/*入棧*/
          ????????????p
          =p->left;?/*遍歷左子樹*/
          ????????}

          ????????
          if(top){
          ????????????p
          =a[--top];?/*出棧*/
          ????????????printf(
          "%d\t",p->data);?/*輸出結點值*/
          ????????????p
          =p->right;?/*遍歷右子樹*/?
          ????????}

          ????}

          }

          posted on 2006-09-27 14:33 ChenGen 閱讀(1671) 評論(2)  編輯  收藏 所屬分類: 數據結構復習

          評論

          # re: 復習二叉排序樹  回復  更多評論   

          又有沙發座了
          2006-09-27 11:05 | 壞男孩1

          # re: 復習二叉排序樹  回復  更多評論   

          呵呵,支持下!
          2006-09-28 08:37 | 冰川
          主站蜘蛛池模板: 芮城县| 赫章县| 涟水县| 山东省| 武平县| 江孜县| 常州市| 通州市| 信阳市| 连州市| 扶风县| 永胜县| 志丹县| 连平县| 资源县| 阿拉善盟| 镇赉县| 麻阳| 岑溪市| 台安县| 晴隆县| 九台市| 山丹县| 启东市| 湄潭县| 当涂县| 昭平县| 牙克石市| 惠东县| 阜康市| 焦作市| 柳江县| 高雄市| 额敏县| 屏南县| 陈巴尔虎旗| 古丈县| 望江县| 桦南县| 棋牌| 蒙自县|