如何建立乙個二叉樹?

2021-09-25 21:46:01 字數 1424 閱讀 7916

用前序序列來建立乙個二叉樹,但單純用前序序列無法還原乙個二叉樹,我們還需要把空節點加入進去。

這是一顆我網上隨便找的二叉樹,它的前序序列是1,2,4,8,9,5,10,11,3,6,12,7

我們加入空節點,用0表示,1,2,4,8,0,0,9,0,0,5,10,0,0,11,0,0,3,6,12,0,0,0,7,0,0

這樣我們就可以用**來還原乙個二叉樹了。

//這是二叉樹的節點,分別可以指向它的左右孩子

typedef

struct node node;

光有節點還不行,因為我們無法確定哪個是它的根節點

typedef

struct

result;

為什麼還會有used呢?

因為當我們建立右子樹時無法知道哪些節點已經用了,需要乙個標記能幫我們找到正確的位置。

result createtree

(int preorder,

int size)

;return result;

}char rootvalue = preorder[0]

;if(rootvalue ==

'#')

;return result;

}// 建立根結點

node *root =

(node *

)malloc

(sizeof

(node));

root->val = rootvalue;

// 建立左子樹

result left_result =

createtree

(preorder +

1, size -1)

;/*left_result.root; // 建立好的左子樹的根結點

left_result.used; // 建立左子樹過程中用掉的 val 的個數

*/// 建立右子樹

result right_result =

createtree

(preorder +

1+ left_result.used, size -

1- left_result.used)

; root->left = left_result.root;

root->right = right_result.root;

result result =

;return result;

}

這是用遞迴的思想來建立乙個二叉樹,根節點相當於老闆,把自己工作做好,其他工作交給下屬,下屬把自己的工作做好,然後再把工作交給自己的下屬。

使用C 建立乙個二叉樹

由於在二叉樹的建立過程中,我們需要使用輸入 讀取的值來判定二叉樹是否有左節點或者右節點。因此我們在建立的時候就需要使用指標的引用或者二重指標。我們定義二叉樹的基本結點形式如下所示 typedef int elemtype struct node typedef node node 為了方便理解,我們...

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

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

二叉樹建立時的乙個問題

typedef struct bitnode bt void creat bt t char c scanf c c t bt malloc sizeof bt t data c 或 t data c creat t lchild creat t rchild void main bt tree c...