先來看一道題目:
時間限制
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...