大話資料結構之樹

2021-09-20 10:05:44 字數 2270 閱讀 5413

看了一下大話資料結構的樹原始碼對應基礎差的東西還是不太友好,這邊寫了一篇簡單的。(個人觀點)

例如:上面這一棵樹寫個簡單關於樹的**實際樹的運用還是圍繞二叉樹和紅黑樹展開

#include

"pch.h"

#include

#include

struct node

;typedef node bitnode;

typedef node* bitree;

typedef

char chtype;

//初始化根節點

bitree init_tree

(bitnode*root)

//建立節點

bitnode*

makenode

(chtype data, bitnode*lchild, bitnode*rchild)

temp-

>data = data;

temp-

>lchild = lchild;

temp-

>rchild = rchild;

return temp;

}//釋放節點

void

free_node

(bitnode*pnode)

}//銷毀樹

void

destroy_free

(bitree tree)

if(temp-

>rchild !=

null

)free_node

(temp);}

//判斷樹是否為空

intempty_free

(bitree tree)

else

}//2

//求樹的深度

intgetdepth

(bitree tree)

left =

getdepth

(tree-

>lchild)

; right =

getdepth

(tree-

>rchild)

;return left > right ?

(left +1)

:(right +1)

;}//獲取的樹的根節點

bitree get_free

(bitree tree)

//獲取的樹的節點

intget_node

(bitnode*node)

//設定的樹的節點

void

set_node

(bitnode*node, chtype data)

//設定的樹的左孩子

bitnode*

set_lchild

(bitnode*node, bitnode*lchild)

//獲取的樹的左孩子

bitnode*

get_lchild

(bitnode*tree)

return tree-

>lchild;

}//設定的樹的右孩子

bitnode*

set_rchild

(bitnode*node, bitnode*rchild)

//獲取的樹的右孩子

bitnode*

get_rchild

(bitnode*tree)

return tree-

>rchild;

}//插入子樹

bitree insert_child

(bitnode*parent,

int lr, bitnode*child)

if(parent-

>rchild ==

null

&& lr ==1)

}return

null;}

//刪除子樹

void

deletechild

(bitnode*parent,

int lr)

if(parent-

>rchild !=

null

&& lr ==1)

}}//中序遍歷

void

middle_print

(bitnode*head)

}int

main()

《大話資料結構》

函式的漸進增長 我們現在來判斷一下,兩個演算法a和b哪個更好。假設兩個演算法的輸入規模都是n,演算法a要做2n 3次操作,你可以理解為先有乙個n次的迴圈,執行完成後,再有乙個n次迴圈,最後有三次賦值或運算,共2n 3次操作。演算法b要做3n 1次操作,你覺得它們誰更快呢 準確來說,答案是不一定的 當...

《大話資料結構》

常見的時間複雜度 常見的時間複雜度如下圖所示 常用的時間複雜度所耗費的時間從小到大依次是 o 1 o logn o n o nlogn o n o n 三次方 o 2 n次方 o n!o n n次方 我們前面已經談到了 o 1 常數階 o logn 對數階 o n 線性階 o n 平方階等,至於o ...

《大話資料結構》

線性表 線性表,從某種就能感覺到,是具有像線一樣的性質的表。在廣場上,有很多人分散在各處,當中有些是小朋友,可也有很多大人,甚至還有不少寵物,這些小朋友的資料對整個廣場人群來說,不能算是線性表的結果。但像剛才提到的那樣,乙個班級的小朋友,乙個跟著乙個排著隊,有乙個打頭,有乙個收尾,當中的小朋友,每乙...