8606 二叉树遍历的建设和运营
時(shí)限:1000MS? 內(nèi)存限制:1000K
問題: 編程題?? 語言: 無限
敘述性說明
用二進(jìn)制表示的名單二叉樹結(jié)構(gòu):按第一個(gè)二進(jìn)制序列,以便輸入節(jié)點(diǎn)值(一個(gè)字符),'#'字符表示空樹。構(gòu)造二叉鏈表表示的二叉樹T;再輸出三種遍歷序列。本題僅僅給出部分代碼,請(qǐng)補(bǔ)全內(nèi)容。
char ch; scanf("%c",&ch); if (ch=='#') T = NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR; ________________________ // 生成根結(jié)點(diǎn) _______________________ // 構(gòu)造左子樹 _________________________ // 構(gòu)造右子樹 } return OK; } // CreateBiTree Status PrintElement( ElemType e ) { // 輸出元素e的值 printf("%c", e ); return OK; }// PrintElement Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 前序遍歷二叉樹T的遞歸算法,對(duì)每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。 //補(bǔ)全代碼,可用多個(gè)語句 } // PreOrderTraverse Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 中序遍歷二叉樹T的遞歸算法。對(duì)每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。 //補(bǔ)全代碼,可用多個(gè)語句 } // InOrderTraverse Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 后序遍歷二叉樹T的遞歸算法,對(duì)每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。 //補(bǔ)全代碼,可用多個(gè)語句 } // PostOrderTraverse int main() //主函數(shù) { //補(bǔ)充代碼 }//main
輸入格式
第一行:輸入一棵二叉樹的先序遍歷序列
輸出格式
第一行:二叉樹的先序遍歷序列
第二行:二叉樹的中序遍歷序列
第三行:二叉樹的后序遍歷序列
輸入例子
AB##C##
輸出例子
ABC
BAC
BCA
答案:
/*構(gòu)造二叉鏈表表示的二叉樹:按先序次序輸入二叉樹中結(jié)點(diǎn)的值(一個(gè)字符),'#'字符表示空樹, 構(gòu)造二叉鏈表表示的二叉樹T;再輸出三種遍歷序列。本題僅僅給出部分代碼,請(qǐng)補(bǔ)全內(nèi)容。*/ #include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status;typedef char ElemType; typedef struct BiTNode{ElemType data;struct BiTNode *lchild,*rchild;//左右孩子指針 } BiTNode,*BiTree;Status CreateBiTree(BiTree &T) { // 算法6.4// 按先序次序輸入二叉樹中結(jié)點(diǎn)的值(一個(gè)字符)。’#’字符表示空樹。// 構(gòu)造二叉鏈表表示的二叉樹T。char ch;scanf("%c",&ch);if (ch=='#') T = NULL;else {if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;T->data=ch; // 生成根結(jié)點(diǎn)CreateBiTree(T->lchild); // 構(gòu)造左子樹CreateBiTree(T->rchild); // 構(gòu)造右子樹}return OK; } // CreateBiTreeStatus PrintElement( ElemType e ) { // 輸出元素e的值 printf("%c", e ); return OK; }// PrintElementStatus PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {// 前序遍歷二叉樹T的遞歸算法,對(duì)每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。//補(bǔ)全代碼,可用多個(gè)語句if(T){if(Visit(T->data))if(PreOrderTraverse(T->lchild,Visit))if(PreOrderTraverse(T->rchild,Visit))return OK;return ERROR;}else return OK;} // PreOrderTraverseStatus InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {// 中序遍歷二叉樹T的遞歸算法,對(duì)每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。//補(bǔ)全代碼,可用多個(gè)語句 if(T) { if(InOrderTraverse(T->lchild ,Visit)) if(Visit(T->data)) if(InOrderTraverse(T->rchild,Visit)) return OK; return ERROR; } else return OK; } // InOrderTraverse Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 后序遍歷二叉樹T的遞歸算法,對(duì)每一個(gè)數(shù)據(jù)元素調(diào)用函數(shù)Visit。
//補(bǔ)全代碼,可用多個(gè)語句 if(T) { if(PostOrderTraverse(T->lchild,Visit)) if(PostOrderTraverse(T->rchild,Visit)) if(Visit(T->data)) return OK; return ERROR; } else return OK; } // PostOrderTraverse int main() //主函數(shù) { BiTree T;//補(bǔ)充代碼 CreateBiTree(T); PreOrderTraverse( T, PrintElement); printf("\n"); InOrderTraverse(T,PrintElement); printf("\n"); PostOrderTraverse(T,PrintElement ); printf("\n"); return 0; }//main
版權(quán)聲明:本文博客原創(chuàng)文章。博客,未經(jīng)同意,不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的8606 二叉树遍历的建设和运营的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++ 6.0 C8051F340 U
- 下一篇: Dell poweredge r210进