對一棵二叉樹進行遍歷,我們可以採取3種順序進行遍歷,分別是前序遍歷、中序遍歷和後序遍歷。這三種方式是以訪問父節點的順序來進行命名的:
前序遍歷:根 ——>左——>右
中序遍歷:左 ——>根——>右
後序遍歷:左 ——>右——>根
對於這棵樹,前序遍歷是:abcdef
中序遍歷是:cbdaef
後續遍歷是:cdbfea
——————————————————————————————————————
已知二叉樹的前序遍歷和中序遍歷,如何得到它的後序遍歷?
我們首先要利用以下幾個特性:
我們以乙個例子做一下這個過程,假設:
前序遍歷的順序是: cabghedf
中序遍歷的順序是: ghbacdef
第一步,我們根據特性a,可以得知根節點是c,然後,根據特性c,我們知道左子樹是:ghba,右子樹是:def。
第二步,取出左子樹,左子樹的前序遍歷是:abgh,中序遍歷是:ghba,根據特性a和c,得出左子樹的父節點是a,並且a沒有右子樹。
第三步,使用同樣的方法,前序是bgh,中序是gbh,得出父節點是b,g和h分別是左右節點。
第四步,回到右子樹,它的前序是edf,中序是def,依然根據特性a和c,得出父節點是e,左右節點是d和f。
到此,我們得到了這棵完整的二叉樹,因此,它的後序遍歷就是:ghbadfec。
已知前序 中序 求二叉樹
題目如下 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。分析 二叉樹的前序遍歷順序是 先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。中序遍歷順序是 中序遍歷根節點的左子樹,...
已知二叉樹的前序和中序,重建二叉樹 筆記
題目如下 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。分析 二叉樹的前序遍歷順序是 先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。中序遍歷順序是 中序遍歷根節點的左子樹,...
已知前序和中序遍歷恢復二叉樹
cpp view plain copy include using namespace std define treelen 6 資料結構定義 struct node void rebuild char ppreorder,char pinorder,intntreelen,node proot 獲...