給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。
輸入格式:
輸入第一行給出乙個正整數
n(n≤30)是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。
輸出格式:
在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。
輸入樣例:
7 2 3 1 5 7 6 4
1 2 3 4 5 6 7
輸出樣例:
4 1 6 3 5 7 2
思路就是先建樹,然後遍歷找出對應序即可.
(通過三種遍歷順序的特點,對應先找出根節點,然後判斷左右子樹的結點個數有好多,且分別在那些位置.然後跟著建樹就可以了.)
具體看**注釋:
#include
#include
#include
using
namespace
std;
int mid[50],hou[50];
int n;
struct nodea[50]; //存樹!.
int build(int la,int ra,int lb,int rb)
//其實只有把第一層建立左右子樹關係弄清楚就可以了,剩下的模仿著來寫就可以了,如果非要弄清楚每一步怎麼來的,就只有把每一步都退出來看了.!
void bfs(int x)
if(a[w].r != 0)
}}int main()
再附上如果是前序和中序的話:(只需要改點地方就是了,思路不要混亂!)
#include
#include
#include
using
namespace
std;
int mid[50],qian[50];
int n;
struct nodea[50]; //存樹!.
int build(int la,int ra,int lb,int rb)
//其實只有把第一層建立左右子樹關係弄清楚就可以了,剩下的模仿著來寫就可以了,如果非要弄清楚每一步怎麼來的,就只有把每一步都退出來看了.!
void bfs(int x)
if(a[w].r != 0)
}}int main()//前序加中序.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define clr(x) memset(x,0,sizeof(x))
#define ll long long int
#define pi acos(-1.0)
#define db double
using
namespace
std;
const
int maxn=1e6;
const
int eps=1e-6;
const
int inf=1e9;
const ll inf=1e15;
int qian[1005];
int mid[1005];
int n;
struct tree
s[1005];
int bulid(int la,int ra,int lb,int rb) //其他序類似.
int cnt; //用於控制輸出格式
void bianli(int t)
}int main()
for(int i=0;iscanf("%d",&mid[i]);
}int rt=bulid(0,n-1,0,n-1);
cnt=0;
bianli(rt);
}}
浙大PAT 樹的同構
7 3 樹的同構 25分 給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2現給定兩棵樹,請你判斷它們是否是同構的。輸入...
PAT 1064 完全二叉樹和平衡二叉樹
給定乙個序列,要求將其構造成完全平衡二叉樹,然後輸出其中序遍歷結果 完全二叉樹指的是任乙個有右子樹的結點必須有左子樹,從層序遍歷的角度來說,他不會在遍歷過程中遇到空節點 若用陣列存放,可知,乙個下標為root的結點,他的左子樹下標一定是2 root,右子樹下標一定是2 root 1 陣列存放節點的順...
二叉樹的遍歷 二叉樹遍歷與儲存
在資料結構中,二叉樹是非常重要的結構。例如 資料庫中經常用到b 樹結構。那麼資料庫是如何去單個查詢或者範圍查詢?首先得理解二叉樹的幾種遍歷順序 先序 中序 後序 層次遍歷。先序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 按層級 class node if c...