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...