已知前序 中序 求二叉樹

2021-09-29 17:48:45 字數 945 閱讀 3878

題目如下:

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

分析:二叉樹的前序遍歷順序是:先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。

中序遍歷順序是:中序遍歷根節點的左子樹,然後是訪問根節點,最後中序遍歷右子樹。

1、二叉樹的前序遍歷序列一定是該樹的根節點

2、中序遍歷序列中根節點前面一定是該樹的左子樹,後面是該樹的右子樹

從上面可知,題目中前序遍歷的第乙個節點一定是這棵二叉樹的根節點,根據中序遍歷序列,可以發現中序遍歷序列中節點之前的是這棵二叉樹的左子樹,是這棵二叉樹的右子樹。然後,對於左子樹,遞迴地把前序子串行和中序子串行看成新的前序遍歷和中序遍歷序列。此時,對於這兩個序列,該子樹的根節點是,該子樹的左子樹為、右子樹為空,如此遞迴下去(即把當前子樹當做樹,又根據上述步驟分析)。這棵右子樹的分析也是這樣。

class treenode

}public class testrecoverbinarytree

return  btconstruct( preorder, inorder, 0, plen-1,0, ilen-1);

}//構建方法,pstart和pend分別是前序遍歷序列陣列的第乙個元素和最後乙個元素;

//istart和iend分別是中序遍歷序列陣列的第乙個元素和最後乙個元素。

public treenode btconstruct(int preorder, int inorder, int pstart, int pend,int istart,int iend)

int root = 0;

//找中序遍歷中的根節點

for(root=istart; root0)

//遍歷右子樹

if(rightlength>0)

return tree;}}

二叉樹 已知前序和中序,求後序

題目描述 若某二叉樹的前遍歷訪問順序是序abdgcefh,中序遍歷順序是dgbaechf,則後序遍歷的訪問順序是什麼。若某二叉樹的前遍歷訪問順序是序abdgcefh,中序遍歷順序是dgbaechf,則後序遍歷的訪問順序是什麼。分析 首先要明確乙個基礎的問題,前序遍歷的順序是 根 左 右 中序遍歷的順...

已知二叉樹的前序和中序,求後序

以前在學習資料結構的時候,經常會有一道選擇題,已知二叉樹的前序和中序遍歷,求二叉樹的後序遍歷。後來想到用程式設計的方法來實現它,限於水平有限,一直無從下手。後來,受另乙個問題啟發,才想出其解法 include include include typedef struct btree btree en...

已知二叉樹的中序和後序求前序

例子,後序遍歷為 gbdehfca,中序遍歷為 dgbaechf 後序遍歷中的最後乙個元素是根節點,a,然後查詢中序中a的位置 把中序遍歷分成 dgba echf,而因為節點個數要對應 後序遍歷分為 gbd ehfc a,gbd為左子樹,ehfc為右子樹,這樣又可以遞迴計算了 最後形成的二叉樹如下所...