如果二叉樹為:
a
b c
d e
由于程式中要知道葉子結點(終點)。是以要講上面的二叉樹變成擴充二叉樹(把葉子結點的孩子補成#,用作标記),擴充後就變成了:
a
b c
# d # e
# # # #
那麼在輸入的時候,須要輸入ab#d##c#e##(輸入後直接回車就可以)
#include <stdio.h>
#include<stdlib.h>
#define ElemType char
//節點聲明,資料域、左孩子指針、右孩子指針
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTree createBiTree()
{
BiTree T;
char ch;
scanf("%c", &ch);
if (ch == '#')
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = createBiTree();
T->rchild = createBiTree();
}
return T;
以下就是二叉樹的周遊。周遊是通過遞歸進行周遊
//先序周遊
void PreorderTraverse(BiTree T)
if (T)
printf("%c\n", T->data);
PreorderTraverse(T->lchild);
PreorderTraverse(T->rchild);
//中序周遊
void InorderTraverse(BiTree T)
//後序周遊
void PostorderTraverse(BiTree T)
二叉樹高度的求法傳回T所指向的二叉樹的高度
處理方法:1.若T為空則傳回0否則
2.求出左右子樹的高度L1和L2。并傳回兩者之中最大的。
3.由于沒有算根節點僅僅是求的左右子樹。是以須要加1。
int dep(BiTree T)
int max;
if (T == NULL)
return 0;
max = dep(T->lchild);
if (dep(T->rchild) > max)
max = dep(T->rchild);
return max + 1;
int main(void)
int ch;
printf("請利用先序插入法插入您要建立的二叉樹!\n");
T = createBiTree();
while (1)
printf("按下列選項選擇您要進行的操作\n");
printf("1前序輸出.\n");
printf("2.後序輸出\n");
printf("3.中序輸出\n");
printf("4.退出\n");
scanf("%d", &ch);
switch (ch)
case 1:
PreorderTraverse(T); break;
case 2:
PostorderTraverse(T); break;
case 3:
InorderTraverse(T); break;
case 4:
default:
break;

以下是我做的一點點改進,利用c++中的指針引用将問題進行了簡單的改動。以下是基本的兩個函數。就是BST樹的建構函數以及主函數
建構函數
這樣的方法不須要傳回值了,是直接對指針進行操作。
主函數的寫法