先根建樹中序遍歷

2021-06-27 09:29:25 字數 1679 閱讀 4541

description

1、問題描述

給定一棵按「先根」遍歷儲存表示的二叉樹,請中根遍歷這棵二叉樹。

2、二叉樹建立說明

⑴、按「先根」遍歷儲存表示的二叉樹中,如果在遍歷過程中,發現子樹為空,輸出0

⑵、例如:a有b子樹,沒有右子樹,其「先根」遍歷為a b 0 0 0

⑶、例如:a為根,b為a的右孩子;c為b的左孩子,d為b的右孩子,其「先根」遍歷為a 0 b c 0 0 d 0 0

input

第一行:先根遍歷的二叉樹結點數目(包括空結點)

第二行:n個「先根」遍歷二叉樹字串行(用空格隔開)(字元0表示空結點)

output

第一行:二叉樹的中根遍歷序列(結點用空格隔開)(最後乙個結點之後也留有空格)

sample input

9a 0 b c 0 0 d 0 0

sample output

a c b d 

#include

using namespace std; 

#include

const int max = 30; 

class bitreenode 

class bitree;           

void createtree(char treearray,int n);  

void inorder();         

void bitree::createtree(chartreearray,int n)

pos = 0; int i;

for(i = 0;i < n;i++) 

strtree[i] = treearray[i];

root = createbitree(); 

bitreenode *bitree::createbitree()

bitreenode *t; 

char ch; 

ch = strtree[pos++]; 

if(ch == '0') 

t = null; 

else{ 

t = new bitreenode(); 

t->data = ch;                    

t->lchild = createbitree();      

t->rchild = createbitree();       

return t; 

void bitree::inorder()

inorder(root); 

void bitree::inorder(bitreenode *t)

if(t)

inorder(t->lchild);

coutinorder(t->rchild);  

int main() 

int i,n; 

char str[max];

bitree t; 

//freopen("cin1.txt", "r", stdin); 

cin>>n;

for(i = 0;i < n; i++) 

cin>>str[i]; 

t.createtree(str, n);  

t.inorder();        

cout

(後序 中序建樹)根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數 n 是樹中結點的個數。隨後兩行,每行給出 n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空格...

根據先序中序輸出後序(非建樹版)

不管是左右子樹還是整棵樹,先序遍歷的第乙個元素就是根節點,然後從中序遍歷中找到根節點在中序遍歷的位置,並且記錄左子樹元素的個數。先輸出左子樹,再輸出右子樹。最後輸出根節點 includeusing namespace std string pri,mid void print int l1,int ...

7 1 根據後序和中序遍歷輸出先序遍歷(25 分)

題目鏈結 本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數 n 是樹中結點的個數。隨後兩行,每行給出 n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間...