用前序序列來建立乙個二叉樹,但單純用前序序列無法還原乙個二叉樹,我們還需要把空節點加入進去。
這是一顆我網上隨便找的二叉樹,它的前序序列是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...