隨筆-204  評論-90  文章-8  trackbacks-0
          本文實現二叉樹的遞歸創建、遍歷及深度計算。即輸入:abd##e##cf###(按二叉樹結構輸入)
          二叉樹:
          返回結果如下:


          完整代碼如下:
           #include <stdio.h>
          //樹結構
           typedef struct tree {
               
          char data;
              
          struct tree *lchild, *rchild;
           } tree;

           
          //創建樹
           struct tree* create_tree() {
               
          char node_data;
              scanf(
          "%c"&node_data);
              
          if(node_data == '#') {
                  
          return NULL;
              } 
          else {
                  
          struct tree *= NULL;
                  T 
          = (struct tree*)malloc(sizeof(struct tree));
                  T
          ->data = node_data;
                  T
          ->lchild = create_tree();
                  T
          ->rchild = create_tree();
                  
          return T;
              }
           }

           
          //先序遍歷
           void pre_traverse(struct tree *T) {
               
          if(T == NULL) {
                  
          return;
              } 
          else {
                  printf(
          "%c\t", T->data);
                  pre_traverse(T
          ->lchild);
                  pre_traverse(T
          ->rchild);
              }
           }
           
          //中序遍歷
           void mid_traverse(struct tree *T) {
               
          if(T == NULL) {
                  
          return;
              } 
          else {
                  mid_traverse(T
          ->lchild);
                  printf(
          "%c\t", T->data);
                  mid_traverse(T
          ->rchild);
                  
              }
           }
           
          //后序遍歷
           void aft_traverse(struct tree *T) {
               
          if(T == NULL) {
                  
          return;
              } 
          else {
                  aft_traverse(T
          ->lchild);
                  aft_traverse(T
          ->rchild);
                  printf(
          "%c\t", T->data);
              }
           }
          //深度
          int tree_deepth(struct tree *T) {
              
          int i,j;
              
          if(!T) {
                  
          return 0;
              } 
          else {
                  
          if(T->lchild)
                      i 
          = tree_deepth(T->lchild);
                  
          else 
                      i 
          = 0;

                  
          if(T->rchild)
                      j 
          = tree_deepth(T->rchild);
                  
          else
                      j 
          = 0;
              
          return i > j ? (i + 1) : (j + 1);
              }
          }

           
          int main(int argc, char **argv) {
               
          struct tree *= create_tree();
              
          if(T) {
                  printf(
          "%s\n""先序:");
                  pre_traverse(T);
                  printf(
          "\n%s\n""中序:");
                  mid_traverse(T);
                  printf(
          "\n%s\n""后序:");
                  aft_traverse(T);
                  printf(
          "\n%s\n""深度:");
                  
          int deepth = tree_deepth(T);
                  printf(
          "%d\n", deepth);
                  printf(
          "\n");
              }
               
          return 0;
           }

          posted on 2012-04-09 17:19 一凡 閱讀(310) 評論(0)  編輯  收藏 所屬分類: 數據結構&算法

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 保靖县| 宣城市| 崇信县| 佛冈县| 平利县| 高州市| 调兵山市| 渝中区| 高安市| 昭觉县| 牙克石市| 永康市| 峡江县| 临泉县| 西华县| 昭平县| 商水县| 上蔡县| 郯城县| 濉溪县| 诏安县| 德惠市| 浪卡子县| 肃北| 永城市| 余江县| 麦盖提县| 周至县| 漳州市| 若尔盖县| 长泰县| 赫章县| 正蓝旗| 定南县| 长宁县| 和田县| 博客| 巨野县| 育儿| 阳泉市| 财经|