看了一下大話資料結構的樹原始碼對應基礎差的東西還是不太友好,這邊寫了一篇簡單的。(個人觀點)
例如:上面這一棵樹寫個簡單關於樹的**實際樹的運用還是圍繞二叉樹和紅黑樹展開:
#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 ...
《大話資料結構》
線性表 線性表,從某種就能感覺到,是具有像線一樣的性質的表。在廣場上,有很多人分散在各處,當中有些是小朋友,可也有很多大人,甚至還有不少寵物,這些小朋友的資料對整個廣場人群來說,不能算是線性表的結果。但像剛才提到的那樣,乙個班級的小朋友,乙個跟著乙個排著隊,有乙個打頭,有乙個收尾,當中的小朋友,每乙...