二叉树的可视化
来源:互联网 发布:淘宝天猫优惠券网站 编辑:程序博客网 时间:2024/05/19 14:51
经常我们创建一个树的时候,我们都希望能直观的看到tree的样子,以确认tree是否正确,要么手画,要么电脑自动生成。
那么下面我们就看看如何自动生成一个tree。
这里我们要用到一个开源的软件Graphviz ,官网http://www.graphviz.org/
安装方法有两种:
1. 如果是ubuntu系统,可以直接敲入以下命令
sudo apt-get install graphviz
2. 直接下载源码包安装
A. 源码包下载地址
http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz
B. 解压源码包
tar zxvf graphviz-2.38.0.tar.gz
C. 执行./configure
D. make
E. make install
安装完成后,直接敲dot -v命令,如果安装成功,会有以下信息输出
关于graphviz的一些用法,可以参考官网的使用说明
http://www.graphviz.org/Documentation.php
或者可以参考下面这个例子
程序员的绘图利器 — Graphviz
有了上面的基础知识后,那么接下来我们看看,如何用graphviz来画一棵二叉树。
原理很简单,就是将二叉树的节点通过写文件的方式,按照graphviz的DOT格式,写到一个文件里面,然后再用dot命令,将生成的dot文件,转换成你想要的格式。
具体看代码实现
关于二叉树的创建方法,请参考下面的这篇文章
二叉树的创建与遍历
tree_visual_create.h
#ifndef __TREE_VISUAL_CREATE_H__#define __TREE_VISUAL_CREATE_H__extern void tree_visual_create(BI_TREE * tree, char * fileName);#endif
tree_visual_create.c
#include <stdio.h>#include <stdlib.h>#include "binary_tree.h"#include "tree_visual_create.h"void tree_create_dot(BI_TREE * node, FILE* stream){ if(node->lChild) { fprintf(stream," %c -> %c;\n", (node->value), (node->lChild->value)); if(NULL == node->rChild) { fprintf(stream," %c -> null%c[weight=100, style=invis]; null%c[style=invis];\n", (node->value), (node->value), (node->value)); } tree_create_dot(node->lChild, stream); } if(node->rChild) { if(NULL == node->lChild) { fprintf(stream," %c -> null%c[weight=100, style=invis]; null%c[style=invis];\n", (node->value), (node->value), (node->value)); } fprintf(stream," %c -> %c;\n", (node->value), (node->rChild->value)); tree_create_dot(node->rChild, stream); }}void tree_visual_create(BI_TREE * tree, char * fileName){ FILE * stream = fopen(fileName,"w+"); if(stream == NULL) { fprintf(stderr, "open failed n"); return; } fprintf(stream,"digraph {\n"); fprintf(stream," node[width=0.5,height=0.5];\n"); fprintf(stream," edge[color=blue, arrowhead=normal];\n"); fprintf(stream," nodesep=0.5;\n\n"); tree_create_dot(tree, stream); fprintf(stream,"}\n"); fclose(stream); return; }
上面的tree_visual_create函数里的
tree参数:要转换的二叉树
fileName参数:生成文件的名字
调用方法可以参考下面的代码
void binary_tree_main_test(void){ BI_TREE *tree = binary_tree_create(); tree_visual_create(tree, "tree.dot"); binary_tree_destroy(tree);}
调用完成之后,就会生成一个xxx.dot(这个上面你调用函数tree_visual_create,传递进入的文件名fileName)文件,然后转换命令如下
dot -Tsvg xxx.dot -o tree.svg
我这里转换的是svg格式(该格式在window下可以用浏览器打开,如果是ubuntu下,可以直接打开),因为我装完Graphviz之后,可能是系统某些lib的问题,导致一些格式不支持,如果你想确认你装的Graphviz支持哪些格式,可以敲入下面的命令
dot -T?
敲完之后,会有下面的结果,Use one of后面的格式,就是你系统所支持的格式
下面附上两张生成二叉树的截图
- 二叉树的可视化
- 二叉树的可视化
- 二叉树的可视化
- 二叉树的可视化
- java 实现二叉树的可视化
- 二叉树可视化--Graphviz
- 可视化遍历二叉树
- 二叉树可视化--Graphviz
- 半可视化打印二叉树
- 算法,请不要这么经典 - 二叉树的可视化
- Flex布局+JS:实现可视化的二叉树遍历
- python建立二叉树并且可视化
- 二叉树可视化创建(二叉树正输出)
- 二叉查找树C语言实现及其可视化
- 前端fabric.js实现二叉树可视化布局
- tensorboard的可视化及模型可视化
- 二叉树的各种遍历,二叉树改链表,二叉树复习
- 二叉树的宽度(二叉树)
- android 开发零起步学习笔记(二十二):ANDROID应用ACTIVITY、DIALOG、POPWINDOW、TOAST窗口添加机制及源码分析(一)
- 可变参数
- 前端知识小测验
- unreal engine 4.13 打包出错
- MySQL中MyISAM文件损坏时的一种修复方法
- 二叉树的可视化
- js返回两个数之间的随机数
- android 开发零起步学习笔记(二十二):ANDROID应用ACTIVITY、DIALOG、POPWINDOW、TOAST窗口添加机制及源码分析(二)
- 解决qt安装过程中QXcbConnection: Could not connect to display问题
- 【React】React Js入门教程(一学就会)
- Docker 学习资源整理
- C语言:scanf("%s",a)和gets(a)的区别(a[i]是字符串数组)
- Tab层切换02-兼容IE8和Chrome浏览器
- linux下搭建android开发环境出错:Unable to run mksdcard SDK tool.