1184_二叉樹遍歷

// 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");

    }

}

發佈了60 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章