用C語言實現線索二叉樹

2021-08-20 07:05:04 字數 1702 閱讀 5703

為什麼會有線索二叉樹?當以二叉鍊錶形式來儲存二叉樹時,只能找到節點的左右子樹資訊,而不能直接得到節點的前驅和後繼資訊(只有通過遍歷,在動態過程中才能查到前驅和後繼的資訊)

因此就有了線索二叉樹,由二叉樹的性質可知,一棵具有 n 個節點的二叉樹,對應的二叉鍊錶中共有 2n 個指標域,其中 n-1 個用於指向除根節點以外的 n-1 個節點,另外n+1個指標域為空。可以利用二叉鍊錶中的這些空指標域來存放節點的前驅和後繼,即可找到線索二叉樹。

線索二叉樹的建立

**實現

#include#include#includetypedef char date;

typedef enum

nodeflag;

typedef struct threadtree

threadbintree;

threadbintree *previous=null;

//設定根節點

threadbintree *threadbininit()

return null;

}//二叉樹的清空

void bintreeclear(threadbintree *q)

return;

} //查詢父節點

threadbintree *searchnode(threadbintree *bt,date date)

else

else

}} //新增到左或者右

int bintreeaddnode(threadbintree *bt,threadbintree *q,int n)

switch(n)

bt->left=q;

printf("新增成功\n");

break;

case 2:

if(bt->right)

bt->right=q;

printf("新增成功\n");

break;

} return 1;

} //新增節點

void addnode(threadbintree *bt)

printf("select:1.新增左邊 2.新增右邊\n");

do

}while(select!=1&&select!=2);

}return ;

}//生成線索二叉樹

void bintreethreading(threadbintree *bt)

previous=bt;

bintreethreading(bt->right);

}}void oper(threadbintree *bt)

//查詢後繼

threadbintree *threadbintreenext(threadbintree *bt)

} //中序遍歷線索二叉樹

void threadbintreezhong(threadbintree *bt,void(*oper)(threadbintree *bt))

while(bt);

}} int main()

}bintreeclear(bt);

bt=null;

return 0;

}

C語言實現二叉樹

1.c語言實現二叉樹中節點間最大距離 includetypedef struct treenode treenode 我們可以將所有的結點的左右子樹的高度和計算一下,然後取出最大值,就是最遠的距離。int getmaxdistance treenode root,int maxdistance in...

二叉樹(C語言實現)

以下為用c語言實現的二叉排序樹,包含了樹的建立,銷毀,新增,刪除,修改,前 中 後 層序遍歷,深度,密度。include include include define type int typedef struct node node 建立結點 node creat node type data 新...

c語言實現線索二叉樹的建立,線索化以及遍歷

結構與函式 typedef struct threadnodethreadnode,threadtree threadtree initthreadtree void inthread threadtree p,threadtree pre 通過中序遍歷對二叉樹線索化 void createinth...