二叉樹 前中序陣列建立唯一二叉樹

2021-08-21 04:58:37 字數 1391 閱讀 8798

具有n個結點的不同的二叉樹有多少種?這與用棧得出的從1到n的數字有多少種不同的排列具有相同的結論。

那麼,利用給定了一顆二叉樹的前序序列(abhfdeckg)和中序序列(hbdfaekcg)能否唯一的確定一顆二叉樹?

前序序列中,第乙個字母a一定是數的根結點。中序序列中,被劃分為兩個子串行:((hbdf)a(ekcg)),這樣與二叉樹第一次近似。

然後,取前序序列的下乙個字母b,它出現在a的左子樹,應該是a左子樹的根,它把中序子串行又劃分成兩個子串行:((h)b(df)),a結點的左子樹與二叉樹近似。

通過下面這張圖就可以簡單的理解利用前序序列和中序序列建立二叉樹的過程。

前序序列(a b h f d e c k g)

中序序列(h b d f a e k c g)

**實現

#include

#include

using

namespace

std;

template

struct bintreenode

};template

class binarytree

//利用前序和中序陣列,建立唯一二叉樹

bintreenode* createbintree_prein(t * vlr, t * lvr, int sz)

bintreenode* t = new bintreenode(lvr[i]);

t->_pleft = createbintree_prein(vlr + 1, lvr, i);

t->_pright = createbintree_prein(vlr + i + 1, lvr + i + 1, sz - i - 1);

return t;

}//前序遍歷顯示二叉樹

bool preorder(bintreenode* node)

bintreenode* get()

private:

bintreenode* _proot;

};int main()

; /*s.createbintree_queue(a,8);

proot = s.get();

s.preorder(proot);*/

int vlr[9] = ;

int lvr[9] = ;

proot = s.createbintree_prein(vlr, lvr, 9);

s.preorder(proot);

return

0;}

二叉樹學習(一)二叉樹基礎

最近準備學習一下資料結構,二叉樹當然是必須要了解的了。網上看了一些貼子,順便把重要的內容就記下來了,有需要的同學可以看看,入門看很有幫助。1.1 定義 1.2 結點的度 1.3 結點關係 1.4 結點層次 2.1 定義 2.2 二叉樹特點 每個結點最多有兩顆子樹,所以二叉樹中不存在度大於2的結點。左...

前序建立二叉樹 前序 中序 後序遍歷二叉樹

二叉樹的建立 如果要在記憶體中建立乙個如下左圖這樣的樹,wield 能讓每個結點確認是否有左右孩子,我們對它進行擴充套件,變成如下右圖的樣子,也就是將二叉樹中的每個結點的空指標引出乙個虛結點,其值為乙個特定值,比如 稱之為擴充套件二叉樹。擴充套件二叉樹就可以做到乙個遍歷序列確定一棵二叉樹了。如前序遍...

建立二叉樹 後序建立二叉樹

由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...