二叉樹視覺化 Graphviz

2021-06-18 03:53:39 字數 1264 閱讀 3704

大家平時寫c程式有沒有種把記憶體裡的資料結構全給畫出來的衝動呢?資料量小的話,畫起來還蠻簡單,用viso,我前面的文章都用viso畫的。之前寫紅黑樹**的時候,用的是命令列把整個樹列印出來,不過只是一些小片段,很醜,還得自己手動再在紙上畫一遍,非常麻煩,要是用程式就能把圖畫出來那就爽了。好了,推薦使用 graphviz這個東東,so 一下就知道啦,功能挺豐富的,也提供了很多庫(c,php,python等),下面畫一顆簡單的紅黑樹(紅黑樹**參考我前面的**,下面只寫畫樹的**)直接看效果圖:

這樹怎麼畫的呢?參考官網 

1.編寫規則檔案(可以用graphviz自帶的lib,如cgraph等生成,或者直接就用fprintf生成,可以簡單看下中文的翻譯 簡單的dot規則)

2.用graphviz自帶的一些工具例如dot等解析一下規則檔案,然後生成(ps,jpg,png等)或者其它格式的檔案。

下面是實現。

void rbtree_fprint_node(rbtree_node * t,file *fp)else

fprintf(fp,"%d[label=\"| %d | \"];\n",t->key.value,t->key.value);

}void rbtree_fprint_tree(rbtree_node * t,file *fp)

if(t->left != rb_nil)

if(t->right != rb_nil)

rbtree_fprint_tree(t->left,fp);

rbtree_fprint_tree(t->right,fp);

}

int main(int argc,char *argv);

int i;

rbtree_init_nil();

t = rbtree_create(15);

t->color = rb_black;

for(i=0;i<15;i++)

//rb tree print

file *fp;

fp = fopen("g2.dot","w+");

fprintf(fp,"digraph g");

fclose(fp);

}

最終生成的是 乙個  dot檔案,dot檔案的語法上官網查,並不是很複雜。

digraph g

完全二叉樹視覺化

最近在看一些資料結構和演算法,對二叉樹接觸比較多,寫程式時要想知道樹的狀態只能通過監視視窗翻著看,比較費事而且不清晰,因此想寫個將二叉樹視覺化的程式,不過筆者水平有限,暫時只實現了針對完全二叉樹的,如果不是完全二叉樹則可以用0或其他特徵字元代替前部預設的字元,以下分享給大家取用。貼 之前先放個原理圖...

二叉樹視覺化建立(二叉樹正輸出)

1.上面簡單的介紹了二叉樹的線性儲存.2.分析二叉樹的橫向列印.由於在終端上如果不呼叫系統座標函式,而只呼叫printf 來輸出,只能是從上到下從左到右進行,根據這一特點我們只需要 知道每個節點所在的x座標 即前面空了x 1個空格 再加上層次列印就非常容易列印二叉樹了,如根節點可以計算的其座標為 1...

二叉樹python實現和視覺化

在刷leetcode時,有時候需要在本地除錯 但是苦於本地沒有樹的資料型別,所以自己動手用python寫了乙個二叉樹類,並且實現了視覺化。下面的程式僅僅是為了建立二叉樹,方便在刷leetcode有關題目時進行本地除錯 所以有些功能沒有加上去,比如刪除節點的功能。程式雖然是二叉樹類,也容易擴充套件到多...