由二又樹的遍歷可知,任意一棵二又樹的先序、中序、後序遍歷序列均是唯一的。
由先序和中序序列,或由中序和後序序列,均可以唯一確定一棵二叉樹。(注意:由先序和後序無法確定一顆二叉樹)
1.由先序和中序序列確定二叉樹
根據二叉樹遍歷的定義可知,二叉樹的先序遍歷是先訪問根結點d,其次遍歷左子樹l,最後遍歷右子樹r,即在先序序列中,第乙個結點必是根d;
而另一方面,由於中序遍歷是先遍歷左子樹l,其次訪問根d,最後遍歷右子樹r,即在中序序列中,根結點前是左子樹序列,後是右子樹序列。因此,由先序和中序序列確定二又樹的方法如下:
①由先序序列中的第乙個結點確定根結點d。
②由根結點d分割中序序列:d之前是左子樹上的中序序列.d之後是右子樹r的中序序列,同時獲得l和r的結點個數。
③根據左子樹l的結點個數,分割先序序列:第一結點根d,之後是左子樹l的先序序列,最後是右子樹r的先序序列。
至此,已確定了根d,左子樹l的先序和中序序列,右子樹r的先序和中序序列。如此類推,再對每棵子樹進行上述處理,便可確定整棵二叉樹。
個人理解:
第一步:首先根據先序序列確定根結點,再由確立的根結點分割中序序列,確立根結點左右子樹的結點;例子:第二步:確立根結點左右子樹的結點之後,先看左子樹的結點在先序序列中誰更靠前(最靠前的為該層的左節點),再看右子樹的結點在先序序列中誰更靠前(最靠前的為該層的右節點);
第三步:在第二步確立了左右結點後,先由左結點分割中序序列,確立左結點以下的左右結點,再由右結點分割中序序列,確立右結點以下的左右結點。
第四步:確立左右結點左右子樹的結點之後,先看左子樹的結點在先序序列中誰更靠前(最靠前的為該層的左節點),再看右子樹的結點在先序序列中誰更靠前(最靠前的為該層的右節點);
…(重複第三步第四步)
2.由中序和後序序列確定二叉樹
類似於上述由先序和中序序列確定二叉樹的方法,可得到由中序和後序序列確定二叉樹的方法如下:
①由後序序列中的最後乙個結點確定根結點d;
②由根結點d分割中序序列:d之前是左子樹l的中序序列,d之後是右子樹r的中序序列,同時獲得l和r的結點個數。
③根據左子樹l的結點個數分割後序序列:首先是左子樹l的
後序序列,隨後是右子樹r的後序序列,最後是根結點d。
至此,已確定了根d,左子樹l的中序和後序序列,右子樹r的中序和後序序列。如此類推,再對每棵子樹進行上述處理,便可確定整棵二叉樹。
總體來說,資料結構需要自己慢慢理解,而不是一蹴而就,自己對它的理解還僅僅停留在棧中,要好好努力了,fighting!!!
6 7由遍歷序列確定的二叉樹
在二叉樹的遍歷中,我們知道,給定一棵二叉樹和一種遍歷方法,就可以確定該二叉樹相應的線性序列。那麼,根據給定的遍歷序列能否唯一的確定一棵二叉樹呢?顯然,只由一種序列是無法確定二叉樹的,要根據遍歷序列確定二叉樹,至少需要知道該二叉樹的兩種遍歷序列。表 6 1 列出了兩種遍歷序列組合確定二叉樹的情況。例已...
由兩種遍歷序列確定二叉樹
已知中序和後序遍歷 typedef int elemtype typedef struct tnode position typedef position bintree typedef struct tnode bintree creat int a,int b,int n 陣列a,b分別存放中序...
根據遍歷序列確定二叉樹
1.在先序序列中,第乙個結點一定是二叉樹的根結點 2.在中序序列中,根結點必然將中序序列分割成兩個子串行 前乙個子串行是根結點的左子樹的中序序列,後乙個是右子樹的 3.根據這兩個子串行,在先序序列中找到對應的左右子串行 4.在先序序列中,左子串行的第乙個結點是左子樹的根結點,右子串行同理 5.如此遞...