7 3 根據後序和中序遍歷輸出先序遍歷 25分

2021-10-10 03:05:46 字數 1992 閱讀 9024

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。

輸入格式:

第一行給出正整數n(≤30),是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。

輸出格式:

在一行中輸出preorder:以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多餘空格。

輸入樣例:

72 3 1 5 7 6 4

1 2 3 4 5 6 7

輸出樣例:

preorder: 4 1 3 2 6 5 7

#include

#include

using

namespace std;

typedef

struct nodebitnode,

*bitree;

const

int n =

1e5+10;

int in[n]

,post[n]

,n;/*

因為當同時知道 先序結果 + 中序結果 或者 後序結果 + 中序結果 就可以唯一確定一顆二叉樹,所以可以利用所給出的資料進行二叉樹的重建

首先要知道的是後序遍歷和中序遍歷的特點

後序:左子樹 右子樹 根節點

中序:左子樹 根節點 右子樹

tips: 同一棵樹它的各種遍歷順序出來的結果的長度都是一樣的

模擬一下建樹的過程:

後序:2 3 1 5 7 6 4

中序:1 2 3 4 5 6 7

由最初始的後序可知這棵樹的根節點是 4 同時,由中序遍歷可知 根節點 的左子樹為 1 2 3 (長度為 3) 構成的集合 右子樹為 5 6 7 (長度也為 3) 構成的集合

再看後序遍歷 前面長度為3的集合即為根節點左子樹的後序遍歷的結果,緊跟著的剩下的元素就是根節點右子樹後序遍歷的結果,可知左子樹的根節點為1,右子

樹的根節點為 6 ,再次回到中序遍歷中去,可知 1 無左子樹,所以由 2 和 3 構成的集合是 1 的右子樹,而 6 的左子樹為 5,右子樹為 7,回到後序中去看,

則有 集合 2 3 的根節點為 3 ,其左子樹為 2.

可得出樹為:

41 6

# 3 5 7

2 # # # # #

# #

*/// i 和 j分別為中序和後序陣列中的指標,len表示當前的集合中的元素個數

void

create_tree

(bitree *bt,

int i,

int j,

int len)

int temp = i;

// 暫時記錄中序陣列中指標的初始值

while

(in[temp]

!= post[j + len -1]

)// post[j + len - 1]表示當前的根節點(元素集合中最後乙個被遍歷的點)

(*bt)

=new bitnode;

(*bt)

->data = post[j + len -1]

;// 放入當前的根節點

int dist = temp - i;

// 獲得新的集合長度

create_tree(&

((*bt)

->lchild)

,i,j,dist)

;// 繼續建立左子樹 dist 是左子樹的元素集合中元素的個數

create_tree(&

((*bt)

->rchild)

,temp +

1,j + dist,len - dist -1)

;// 繼續建立右子樹 (len - dist - 1)是右子樹的元素集合中元素的個數

}void

pre(bitree bt)

}int

main

(void

)

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

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

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

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

7 8 根據後序和中序遍歷輸出先序遍歷 20分

輸入格式 第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。輸出格式 在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多餘空格。輸入樣例 7 2 3 1 5 7 ...