// 1184_二叉樹遍歷.cpp : 定義控制檯應用程序的入口點。
//題目1184:二叉樹遍歷
//時間限制:1 秒內存限制:32 兆特殊判題:否提交:3945解決:1597
//題目描述:
//編一個程序,讀入用戶輸入的一串先序遍歷字符串,根據此字符串建立一個二叉樹(以指針方式存儲)。
//例如如下的先序遍歷字符串:
//ABC##DE#G##F###
//其中“#”表示的是空格,空格字符代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結果。
//輸入:
//輸入包括1行字符串,長度不超過100。
//輸出:
//可能有多組測試數據,對於每組數據,
//輸出將輸入字符串建立二叉樹後中序遍歷的序列,每個字符後面都有一個空格。
//每個輸出結果佔一行。
//樣例輸入:
//abc##de#g##f###
//樣例輸出:
//c b e g d f a
//來源:
//2002年華中科技大學計算機研究生機試真題
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define MAX 102
typedef struct BTNode{
char alpah;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void traverse(BTNode *bt)
{
if (bt -> alpah != '#')
{
traverse(bt->lchild);
printf("%c ",bt->alpah);
traverse(bt -> rchild);
}
}
int main()
{
char s[102];
BTNode *stack[102];
int top ;
while(scanf("%s",&s)!=EOF)
{
top = -1;
int i = 0;
BTNode *temp =NULL;
while (s[i]!='\0')
{
//printf("%c",s[i]);
BTNode *bt = (BTNode *)malloc(sizeof(BTNode));
bt->alpah = s[i];
bt->lchild = NULL;
bt->rchild = NULL;
if (s[i]!='#' || top == -1)
{
stack[++top] = bt;
}
else
{
if (stack[top] -> lchild == NULL)
{
stack[top] -> lchild = bt;
}
else if (stack[top] -> rchild == NULL)
{
stack[top] -> rchild = bt;
temp = stack[top--];
while (top != -1 && stack[top] -> lchild != NULL)
{
stack[top] -> rchild = temp;
temp = stack[top --];
}
if (top != -1)
{
stack[top] -> lchild = temp;
}
}
}
i++;
}
traverse(temp);
printf("\n");
}
}
1184_二叉樹遍歷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.