建立二叉樹

2022-03-22 09:25:05 字數 1142 閱讀 7266

from nuanyangyang大神。。

你需要乙個領域專門語言(dsl)

erchashu = (((

(),1,()

),2,

((),

3,())

),4,((

((),5,(

(),6,

()),

),7,((

(),8,

()),9,(

(),10,())

))))

def inorder(tree):

if tree == ():

return

else:

l, m, r = tree

inorder(l)

print(m)

inorder(r)

inorder(erchashu)

python語言。我用空元組,即「()」表示葉子節點,用三元組(l, m, r)表示分支節點。資料儲存在分支節點上,葉子節點都是空的。這樣,空樹就表示為(),只有根的樹表示為((), 42, ()),其中42可以換成隨便什麼資料。於是,可以用這種方法組合出比較複雜的樹,比如:

(  ((),1,()),     2,      ((),3,()))

這就是乙個有3個節點的樹。

struct node ;

然後建立兩個函式來構造它們:

// 用br建立分支節點,帶資料

node* br(node *left, int data, node *right)

// 用lf建立葉子節點,沒有資料

node* lf()

那麼同樣的樹可以寫成:

node *root = br(  br(lf(),1,lf()),     2,      br(lf(),3,lf()));

如果這個還麻煩,可以加乙個建立「只有資料沒有孩子的分支節點」:

node* bs(int data) 

node *root = br( bs(1), 2, bs(3));

還嫌麻煩的話,可以把bs改名叫br,反正c++允許函式名過載。

其實不管怎麼樣,樹的每個節點都要建立。麻煩的只是表達方式。有乙個好的語言,就會很簡單。

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

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

建立二叉樹

今天看到了乙個資料結構的筆試題目,他要求寫出建立二叉樹的程式。我想練習練習,所以想了一下其大致的思路,記錄如下 題目的要求很簡單,給出乙個字串序列 比如說a b d,e h j,k l,m n c f,g i 然後要求按照其規則建立二叉樹,題目不難但是卻花費了我不少的時間 第一步,我想到的是需要什麼...

建立二叉樹

二叉樹在結構上不依賴組織鍊錶 指路法通過根節點與目標節點的相對位置進行定位 define bt left 0 define bt right 1 typedef unsigned long long btpos 結點指標域定義 typedef struct tag btressnode btress...