樹的遍歷 已知中序 前序 後序)求層次遍歷

2021-07-11 23:36:16 字數 1635 閱讀 7795

先來看一道題目:

時間限制

400 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 陳越

給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。

輸入格式:

輸入第一行給出乙個正整數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

首先我們先看一下已知前序,中序。求後序遍歷的結果。

package com.zjianhao.tree;

/** * created by 張建浩(clarence) on 2016-5-22 21:21.

* the author's website:

* the author's github:

*/public class tree ;

private int v = ;

private static int r = ;

public static void main(string args)

/***已知前序遍歷,中序遍歷,求後序遍歷

* @param prestart

* @param instart

* @param length

*/public void solvepostorder(int prestart,int instart,int length)

public int getlength(int start,int length,int v)

好了,由中序加任意遍歷次序我們全部都解決了。現在我們來看一下題目。

題目中要求層次遍歷。我們可以嘗試由後續和中序遍歷構造出一棵樹來,樹的層次遍歷就很容易了。

首先我們需要對上述已知後序中序遍歷的情況的**稍作修改

首先定義乙個節點類:

private class node

public nodesolvepreorder(int post,int instart,int length)
構造完樹後,我們按照層次遍歷的結果對樹進行遍歷,樹的層次遍歷**我們應該都很熟悉了:

public void solvelevelorder(int post,int instart,int length)

if (rt.right != null)

}}

這樣我們便完成了已知後序,中序遍歷,求層次遍歷的結果。同理,我們對已知前序,中序,求後序遍歷的**稍作修改,便可以求出已知前序,中序遍歷,求層次遍歷的結果

這裡便不再累述。

已知中序遍歷和後序遍歷,求前序遍歷

已知中序遍歷和後序遍歷,求前序遍歷 演算法的主要部分是將中序遍歷分成左中右三部分 將後序遍歷分成左右中三部分 最後後序建樹的時候節點就等於中間的部分 左子樹由中序遍歷的左部分和後序遍歷的左部分構建 右子樹由中序遍歷的右部分和後序遍歷的右部分構建 include include include inc...

已知後序遍歷和中序遍歷求前序遍歷

而已知後序遍歷和中序遍歷求前序遍歷的過程差不多,但由於後序遍歷是最後才訪問根節點的 所以要從後開始搜尋,例如上面的例子,後序遍歷為 gbdehfca,中序遍歷為 dgbaechf 後序遍歷中的最後乙個元素是根節點,a,然後查詢中序中a的位置 把中序遍歷分成 dgb a echf,而因為節點個數要對應...

已知前序中序,求後序

思路 先序的遍歷規則為根 左 右,中序的遍歷規則為左 根 右,所以我們在中序中找到與a a必為根 相等的字元,則在中序中g d h b為a的左子樹,e i c j f為a的右子樹,在左子樹和右子樹中,重複前面過程,最後逆向將根列印出來,就是其後序。是乙個遞迴過程 include include us...