1. 程式人生 > >玩轉二叉連結串列 (20 分)

玩轉二叉連結串列 (20 分)

玩轉二叉連結串列 (20 分)

先序建立二叉樹的二叉連結串列

設計程式,按先序建立二叉樹的二叉連結串列;然後先序、中序、後序遍歷二叉樹。

輸入格式:
按先序輸入一棵二叉樹。二叉樹中每個結點的鍵值用字元表示,字元之間不含空格。注意空樹資訊也要提供,以#字元表示空樹。

輸出格式:
輸出3行。第一行是先序遍歷二叉樹的序列,第二行是中序遍歷二叉樹的序列,第三行是後序遍歷二叉樹的序列。每行首尾不得有多餘空格。序列中不含#。

輸入樣例:
ab##dc###

輸出樣例:
abdc
bacd
bcda

遞迴大法好
在這裡插入圖片描述

#include<cstdio>
using
namespace std; struct node{ char data; node* left; node* right; }; typedef node* bt; void build(bt p){ char c; scanf("%c",&c); if(c=='#') { p->data=c; p->left=p->right=NULL; return ; } p->data=c; p->left=p->right=NULL; p->left=new node;
build(p->left); p->right=new node; build(p->right); } void preorder(bt p){ if(p->data!='#'){ printf("%c",p->data); preorder(p->left); preorder(p->right); } } void inorder(bt p){ if(p->data!='#'){ inorder(p->left); printf("%c",p->data); inorder
(p->right); } } void postorder(bt p){ if(p->data!='#'){ postorder(p->left); postorder(p->right); printf("%c",p->data); } } int main(){ bt p=new node; build(p); preorder(p); printf("\n"); inorder(p); printf("\n"); postorder(p); printf("\n"); return 0; }