二叉樹的建立
-
二叉樹的數據結構
typedef struct node
{
int data;
struct node* left;
struct node* right;
/* data */
} Node; -
簡單創建節點
int main() {
Node n1;
Node n2;
Node n3;
Node n4;
n1.data = 5;
n2.data = 6;
n3.data = 7;
n4.data = 8;
//這時候節點沒有連接起來 對節點進行連接
n1.left = &n2; //n2是一個數據實體 而left需要是一個指針 取n2的地址拼到n1的左邊上去
n1.right = &n3;
n2.left = &n4;
n2.right = NULL; //即使沒東西也要 給出NULL
n3.left = NULL;
n3.right = NULL;
n4.left = NULL;
n4.right = NULL;
//創建成功
//先序遍歷驗證
preorder(&n1);//放入一個指針地址 作為頭節點
} -
通過遍歷樹來確認是否是一個真正的二叉樹
//先序遍歷 遞歸
void preorder(Node* node){
if(node != NULL){
printf("%d\n",node -> data);
preorder(node -> left);
preorder(node -> right);
}
}
-
輸出結果
-
中序和后續遍歷
//中序遍歷 遞歸
void inorder(Node* node){
if(node != NULL){
inorder(node -> left);
printf("%d\n",node -> data);
inorder(node -> right);
}
}
//后序遍歷 遞歸
void postorder(Node* node){
if(node != NULL){
postorder(node -> left);
postorder(node -> right);
printf("%d\n",node -> data);
}
} -
改寫創建樹的代碼
void createBiTree(BiTree *T)
{
char ch;
scanf ("%c", &ch); //如果是字符型 %c 回車輸入 算一個字符,ubutun會一直遞歸
if (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)); //構造右子樹
}
} -
最終代碼