程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 題目1184:二叉樹遍歷

題目1184:二叉樹遍歷

編輯:C++入門知識

題目1184:二叉樹遍歷時間限制:1 秒 內存限制:32 兆 特殊判題:否 提交:1562 解決:621   題目描述: 編一個程序,讀入用戶輸入的一串先序遍歷字符串,根據此字符串建立一個二叉樹(以指針方式存儲)。 例如如下的先序遍歷字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結果。     輸入: 輸入包括1行字符串,長度不超過100。   輸出: 可能有多組測試數據,對於每組數據, 輸出將輸入字符串建立二叉樹後中序遍歷的序列,每個字符後面都有一個空格。 每個輸出結果占一行。   樣例輸入: abc##de#g##f###樣例輸出: c b e g d f a 來源: 2002年華中科技大學計算機研究生機試真題       [cpp]  /*********************************   *    日期:2013-3-7   *    作者:SJF0115   *    題號: 九度OJ 題目1184:二叉樹遍歷   *    來源:http://ac.jobdu.com/problem.php?pid=1184   *    結果:AC   *    來源:2002年華中科技大學計算機研究生機試真題   *    總結:  **********************************/   #include<stdio.h>    #include<stdlib.h>    #include<string.h>       char array[101];      //二叉樹結點    typedef struct BiTNode{       char data;       struct BiTNode *lchild,*rchild;   }BiTNode,*BiTree;      //按先序序列創建二叉樹    int CreateBiTree(BiTree &T,int &index,int &n){       if(index == n){           return 0;       }       //按先序次序輸入二叉樹中結點的值(一個字符),‘#’表示空樹        if(array[index] == '#'){           T = NULL;           index++;       }       else{           T = (BiTree)malloc(sizeof(BiTNode));           //生成根結點            T->data = array[index];           index++;           //構造左子樹            CreateBiTree(T->lchild,index,n);           //構造右子樹            CreateBiTree(T->rchild,index,n);       }       return 0;   }   //輸出    void Visit(BiTree T){       if(T->data != '#'){           printf("%c ",T->data);       }   }   //中序遍歷    int InOrder(BiTree T){       if(T != NULL){           //訪問左子結點            InOrder(T->lchild);           //訪問根節點            Visit(T);           //訪問右子結點            InOrder(T->rchild);       }       return 0;   }   int main()   {       int len,index;       while(scanf("%s",array) != EOF){           BiTree T;           len = strlen(array);           index = 0;           //創建二叉樹            CreateBiTree(T,index,len);           //中序遍歷            InOrder(T);           printf("\n");       }       return 0;   }     /*********************************  *    日期:2013-3-7  *    作者:SJF0115  *    題號: 九度OJ 題目1184:二叉樹遍歷  *    來源:http://ac.jobdu.com/problem.php?pid=1184  *    結果:AC  *    來源:2002年華中科技大學計算機研究生機試真題  *    總結: **********************************/ #include<stdio.h> #include<stdlib.h> #include<string.h>   char array[101];   //二叉樹結點 typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;   //按先序序列創建二叉樹 int CreateBiTree(BiTree &T,int &index,int &n){ if(index == n){ return 0; } //按先序次序輸入二叉樹中結點的值(一個字符),‘#’表示空樹 if(array[index] == '#'){ T = NULL; index++; } else{ T = (BiTree)malloc(sizeof(BiTNode)); //生成根結點 T->data = array[index]; index++; //構造左子樹 CreateBiTree(T->lchild,index,n); //構造右子樹 CreateBiTree(T->rchild,index,n); } return 0; } //輸出 void Visit(BiTree T){ if(T->data != '#'){ printf("%c ",T->data); } } //中序遍歷 int InOrder(BiTree T){ if(T != NULL){ //訪問左子結點 InOrder(T->lchild); //訪問根節點 Visit(T); //訪問右子結點 InOrder(T->rchild); } return 0; } int main() { int len,index; while(scanf("%s",array) != EOF){ BiTree T; len = strlen(array); index = 0; //創建二叉樹 CreateBiTree(T,index,len); //中序遍歷 InOrder(T); printf("\n"); }     return 0; }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved