二叉樹的建立與遍歷(c語言實現)
阿新 • • 發佈:2019-02-05
#include <stdio.h> #include <stdlib.h> typedef int ElemType; //這裡用int 作為樹結點的資料 typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; //左右孩子指標 }BiTNode, *BiTree; void createBiTree(BiTree *T); //建立樹 void preOrderTraverse(BiTree T); //前序遍歷 void inOrderTraverse(BiTree T); //中序遍歷 void postOrderTraverse(BiTree T); //後序遍歷 int main() { BiTree T = NULL; createBiTree(&T); preOrderTraverse(T); printf("\n"); inOrderTraverse(T); printf("\n"); postOrderTraverse(T); return 0; } void createBiTree(BiTree *T) { ElemType ch; scanf ("%d", &ch); //如果是字元型 %c 回車輸入 算一個字元,ubutun會一直遞迴 if (0 == ch) //擴充套件二叉樹,虛結點 == 0 { *T = NULL; } else { *T = (BiTree)malloc(sizeof(BiTNode)); //!!! stdlib.h 標頭檔案一定要加!!! if (!*T) { exit(1); //錯誤退出 } (*T)->data = ch; //生成根結點 createBiTree(&((*T)->lchild)); //構造左子樹 createBiTree(&((*T)->rchild)); //構造右子樹 } } void preOrderTraverse(BiTree T) { if (NULL == T) { return; } printf("%d", T->data); //顯示結點資料,可以改成其他對結點的操作 preOrderTraverse(T->lchild); //再先序遍歷左子樹 preOrderTraverse(T->rchild); //最後先序遍歷右子樹 } void inOrderTraverse(BiTree T) { if (NULL == T) { return; } inOrderTraverse(T->lchild); //中序遍歷左子樹 printf("%d", T->data); //顯示結點資料,可以改成其他對結點的操作 inOrderTraverse(T->rchild); //最後再中序遍歷右子樹 } void postOrderTraverse(BiTree T) { if (NULL == T) { return; } postOrderTraverse(T->lchild); //先後序遍歷左子樹 postOrderTraverse(T->rchild); //再後序遍歷右子樹 printf("%d", T->data); //顯示結點資料,可以改成其他對結點的操作 }
執行結果:依次輸入120400300