C語言中樹的建立和遍歷
阿新 • • 發佈:2019-01-23
樹的遍歷分為三種:前序遍歷(根左右),中序遍歷(左根右),後序遍歷(左右根)。
PS:根左右,就是先遍歷根節點,然後是左子樹,最後是右子樹。如下圖:
前序遍歷:ABDECF。
中序遍歷:DBEACF。
後序遍歷:DEBFCA。
PPS:有一種更便捷的方法來寫出三種遍歷的結果:從根節點開始,從左面畫線,將樹沿著邊界圈起來。按照線在節點的不同位置依次寫出資料。其中:前序遍歷為線在節點左側;中序遍歷為線在節點下方;後序遍歷為線在節點右側。如下圖:
這裡我們用前序遍歷的方法來建立樹。使其輸出三種遍歷的結果:
#include <stdio.h> #include <stdlib.h> struct node{//建立節點 char data; struct node* left; struct node* right; }; //前序遍歷 void pre_order(struct node* root) { if(root == NULL) return ; else { printf("%c\t", root->data); pre_order(root->left); pre_order(root->right); } }
//中序遍歷
void min_order(struct node* root)
{
if(root == NULL)
return ;
else {
min_order(root->left);
printf("%c\t", root->data);
min_order(root->right);
}
}
//後序遍歷 void postorder(struct node* root) { if(root == NULL) return ; else { postorder(root->left); postorder(root->right); printf("%c\t", root->data); } }
//前序遍歷建立樹 struct node* create(struct node* root) { char ch = getchar(); //沒有子樹的用#表示 if(ch == '#') return NULL; else { root = malloc(sizeof(struct node)); root->data = ch; root->left = create(root->left); root->right = create(root->right); return root; } } int main() { struct node* root = NULL; root = create(root); pre_order(root); printf("\n"); min_order(root); printf("\n"); postorder(root); printf("\n"); return 0; }
輸入與結果為: