二叉樹的鏈式儲存與實現(C )

2021-06-22 04:57:32 字數 1931 閱讀 4973

二叉鍊錶儲存結構的型別定義如下:

typedef struct node

*bitree,bitnode;

二叉樹的基本運算:

(1)二叉樹的初始化操作。

二叉樹的初始化需要將指向二叉樹的根結點指標置為空。

void initbittree(bitree *t)

(2)二叉樹的銷毀操作。

void destroybittree(bitree *t)

if ((*t)->rchild)

free(*t);

*t=null;

}}

(3)建立二叉樹操作。

根據二叉樹的遞迴定義,先生成二叉樹的根結點,將元素值賦值給結點的資料域,然後遞迴建立左子樹和右子樹。

void createbittree(bitree *t)

else

(*t)->data=ch;

createbittree(&((*t)->lchild)); //構造左子樹

createbittree(&((*t)->rchild)); //構造右子樹

}}

(4)二叉樹的左插入操作。

指標p指向二叉樹t的某個結點,將子樹c插入到t中,使c成為p指向結點的左子樹,p指向結點的原來左子樹成為右子樹。

int insertleftchild(bitree p,bitree c)

return 0;

}

(5)二叉樹的右插入操作。

指標p指向二叉樹t的某個結點,將子樹c插入到t中,使c成為p指向結點的右子樹,p指向結點的原來右子樹成為右子樹。

int insertrightchild(bitree p,bitree c)

return 0;

}

(6)返回二叉樹結點的指標操作。

在二叉樹中查詢指向元素值為e的結點,如果找到該結點,則返回該結點的指標,否則,返回null。

bitree point(bitree t,datatype e)

if (p->lchild) //如果左孩子結點存在,將左孩子結點入隊

if (p->rchild) //如果右孩子結點存在,將右孩子結點入隊

}} return null;

}

(7)返回二叉樹結點的左孩子元素值操作。

如果元素值為e的結點存在,並且該結點的左孩子結點存在,則將該結點的左孩子結點的元素值返回。

datatype leftchild(bitree t,datatype e)

} return;

}

(8)返回二叉樹結點的右孩子元素值操作。

如果元素值為e的結點存在,並且該結點的右孩子結點存在,則將該結點的右孩子結點的元素值返回。

datatype rightchild(bitree t,datatype e)

} return;

}

(9)二叉樹的左刪除操作。

在二叉樹中,指標p指向二叉樹的某個結點,將p所指向的結點的左子樹刪除。

int deleteleftchild(bitree p)

return 0;

}

(10)二叉樹的右刪除操作。

在二叉樹中,指標p指向二叉樹的某個結點,將p所指向的結點的右子樹刪除。

int deleterightchild(bitree p)

return 0;

}

二叉樹鏈式儲存的C實現

在實現二叉樹的鏈式儲存的過程中,我遇到了一些問題,感到對遞迴的理解還不夠深入。另外,中有一處必須使用全域性變數做陣列索引,還在研究其中的原因,已完成,現在貼在部落格中供參考 include include include include define maxsize 100 define ok 1 ...

C 實現鏈式儲存線索二叉樹

一顆線索二叉樹 根據下圖進行節點的建立 如下 因為普通二叉樹有空指標域,所以我們可以利用這些空指標來線索化 1 二叉樹的線索化,實質上就是遍歷一棵二叉樹,在遍歷過程中,訪問節點的操作是檢查當前結點的左右指標域是否為空,如果為空,即將他們改為前驅節點或後繼節點的線索。為記錄前驅節點,定義pre為全域性...

二叉樹的鏈式儲存

實現二叉樹的基本操作 建立 遍歷 計算深度 結點數 葉子數等。輸入c,先序建立二叉樹,表示空節點 輸入h 計算二叉樹的高度 輸入l 計算二叉樹的葉子個數 輸入n 計算二叉樹節點總個數 輸入1 先序遍歷二叉樹 輸入2 中序遍歷二叉樹 輸入3 後續遍歷二叉樹 輸入f 查詢值 x的節點的個數 輸入p 以縮...