二叉树的绘制

2023-05-16

目录

一、知乎方法

二、动手实践

DOT 语言

无向图

有向图

绘制二叉树

设置属性

如何绘制优美的二叉树 


一、知乎方法

知乎上的大佬提供了一系列画图的方法,感兴趣的朋友可以自行去看看

用 Graphviz 绘制一棵漂亮的二叉树 - 南浦月

二叉搜索树,AVL树 - VisuAlgo

Graphviz 入门指南 - 知乎

二、动手实践

DOT 语言

DOT 语言是一种图形描述语言。能够以简单的方式描述图形,并且为人和计算机所理解。

无向图

graph graphname {
   a -- b -- c;
   b -- d;
}

有向图

digraph graphname {
    a -> b -> c;
    b -> d;
}

绘制二叉树

graph g {
    graph[ordering="out"];
    A--B;
    A--C;
    B--D;
    B--E;
    C--F;
    C--NULL[style="invis"];
    A[shape="circle"];
    B[shape="circle"];
    C[shape="circle"];
    D[shape="circle"];
    E[shape="circle"];
    F[shape="circle"];
    NULL[style="invis"];
}

digraph G {
    node [shape=circle]
    edge [arrowhead=vee]
    8 -> 4
    4 -> 2
    2 -> 1
    2 -> 3
    4 -> 6
    6 -> 5
    6 -> 7
    8 -> 10
    10 -> 9
    10 -> 12
    12 -> 11
}

设置属性

属性可以设置在节点和边上,用一对 [] 表示,多个属性可以用空格或者 , 隔开。

strict graph {
  // 设置节点属性
  b [shape=box];
  c [shape=triangle];

  // 设置边属性
  a -- b [color=blue];
  a -- c [style=dotted];
}

 完整的属性列表可以参考Graphviz官网Graphviz。

如何绘制优美的二叉树 

我就进行了Google,发现了Github上还有有人做了相关工作的 GraphViz formatting script for binary trees。

有相关博客可以进一步的学习 

用 Graphviz 绘制一棵漂亮的二叉树 - 南浦月

// from Emden Gansner
// https://mailman.research.att.com/pipermail/graphviz-interest/2010q2/007101.html
// requires GraphViz 2.28.0 (fails with 2.26.3 at least)
BEGIN {
  double tw[node_t];    // width of tree rooted at node
  double nw[node_t];    // width of node
  double xoff[node_t];  // x offset of root from left side of its tree
  double sp = 36;       // extra space between left and right subtrees
  double wd, w, w1, w2; 
  double x, y, z;
  edge_t e1, e2;
  node_t n;
}
BEG_G {
  $.bb = "";
  $tvtype=TV_postfwd;   // visit root after all children visited
}
N {
  sscanf ($.width, "%f", &w);
  w *= 72;  // convert inches to points
  nw[$] = w;
  if ($.outdegree == 0) {
    tw[$] = w;
    xoff[$] = w/2.0;
  }
  else if ($.outdegree == 1) {
    e1 = fstout($);
    w1 = tw[e1.head];    
    tw[$] = w1 + (sp+w)/2.0;
    if (e1.side == "left")
      xoff[$] = tw[$] - w/2.0;
    else
      xoff[$] = w/2.0;
  }
  else {
    e1 = fstout($);
    w1 = tw[e1.head];    
    e2 = nxtout(e1);
    w2 = tw[e2.head];    
    wd = w1 + w2 + sp;
    if (w > wd)
      wd = w;
    tw[$] = wd;
    xoff[$] = w1 + sp/2.0;
  }
}
BEG_G {
  $tvtype=TV_fwd;   // visit root first, then children
}
N {
  if ($.indegree == 0) {
    sscanf ($.pos, "%f,%f", &x, &y);
    $.pos = sprintf("0,%f", y);
  }
  if ($.outdegree == 0) return;
  sscanf ($.pos, "%f,%f", &x, &y);
  wd = tw[$];
  e1 = fstout($);
  n = e1.head;
  sscanf (n.pos, "%f,%f", &z, &y);
  if ($.outdegree == 1) {
    if (e1.side == "left")
      n.pos = sprintf("%f,%f",  x - tw[n] - sp/2.0 + xoff[n], y);
    else
      n.pos = sprintf("%f,%f", x + sp/2.0 + xoff[n], y);
  }
  else {
    n.pos = sprintf("%f,%f", x - tw[n] - sp/2.0 + xoff[n], y);
    e2 = nxtout(e1);
    n = e2.head;
    sscanf (n.pos, "%f,%f", &z, &y);
    n.pos = sprintf("%f,%f", x + sp/2.0 + xoff[n], y);
  }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树的绘制 的相关文章

随机推荐

  • 节气生活,邮箱推送,提前预警,告别炎炎夏日下的束手无策

    初步分析 网站动态显示 故采取selenium爬取 第一步安装Googledrive xff0c phantomjs xff0c pip install selenium 1 xpath查找 切换 节点 element01 span cla
  • python自动化,小程序fiddler抓包

    我在校园吗 xff1f 科技日新月异的当下 xff0c 时刻需要我们 xff0c xff0c xff0c 校园激起了我的学习欲望 行动代号SchoolDays 我在校园吗 xff1f 工具Python xff0c Fiddler 下载安卓F
  • GBT游戏小组游戏爬取,变相解决无法搜索的问题

    本次采用selenium方式爬取 但此代码有个小小问题 在第二个日期分类下会出现多个空格 selenium中的隐性等待和显示等待都测试过 xff0c 无法解决这个问题 故把保存的txt逐行读取 xff0c 再删除空格了 file1 span
  • Win10配置FORTRAN环境 CodeBlocks下载安装教程

    首先 xff0c 前往官网下载最新版本 选择带编译器版本 xff08 名称中包含mingw xff09 xff0c 新版名字中不再包含fortran字眼 xff0c 但如NOTE所述 xff0c 该版本中包含gfortran编译器 xff0
  • dockerfile容器的实战安装nginx和mysql服务

    第三章 实验 xff1a docker容器的实战 一 基础环境 安装docker服务 1 xff09 配置网络yum源 root 64 centos01 cd etc yum repos d root 64 centos01 yum rep
  • 使用 Learner Lab 建立 WordPress 网站 (EC2)

    使用 Learner Lab 建立 WordPress 网站 EC2 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务 xff0c 让学生可以在 100 USD的金额下 xff0c 自行练习所
  • LaTex 排版相关记录--1 参考文献排版

    找到latex代码中的 bibligraphystyle xff0c 然后根据下面的各种需求进行替换 bibliographystyle unsrt 样式同plain xff0c 只是按照引用的先后排序 xff0c 参考文献会根据在正文中引
  • 使用rke构建企业生产k8s,安装kubectl客户端

    一 使用rke构建企业生产k8s xff0c 安装kubectl客户端 1 安装kubectl客户端工具 span class token comment wget https storage googleapis com kubernet
  • 保持pppoe不掉线

    对于无极网络的VPS 修改 etc ppp pppoe server options 这个文件里面的两个参数 默认 xff1a lcp echo interval 1 发送间隔秒 lcp echo failure 5 5次未响应断开 因为o
  • Linux环境编程06

    目录 Linux环境编程之进程管理一 进程的基本概念二 创建进程三 进程的正常退出 Linux环境编程之进程管理 一 进程的基本概念 进程与程序 程序是存储在磁盘上的可执行文件 xff0c 程序被加载到内存中开始运行时叫做进程 一个程序可以
  • 区间最大平均值

    题目链接 xff1a https www luogu com cn problem P1404 题目描述 xff1a 给一个长度为 n 的数列 xff0c 我们需要找出该数列的一个子串 xff0c 使得子串平均数最大化 xff0c 并且子串
  • 输出 0~N 内的素数 ( C++ )

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 快读模板 ( C++ )

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Java正整数分解质因数

    leetcode 2 Java正整数分解质因数 1 题目 xff1a 将一个正整数分解质因数 例如 xff1a 输入 90 打印出 90 61 233 5 2 题目解析 xff1a 先将数m从2开始整除 xff0c 如果能被2整除 xff0
  • you-get使用教程

    you get爬虫 xff0c 依赖于Python3 10 xff0c 可以爬取网页无法下载的视频文件 xff0c 具体步骤如下 xff1a 1 xff0c 下载Python3 10无脑下一步安装 2 xff0c 新建一个空白文件夹 xff
  • Windows如何自定义右键新建菜单栏

    目录 右键新建菜单的实现原理在右键新建菜单中新增项方法一可能出现的问题 方法二编辑右键新建菜单的图标 修改右键新建菜单栏的顺序 右键新建菜单的实现原理 参考文章 修改 win10 右键 新建 菜单 xff08 原理 两种方法及注意事项 xf
  • Centos 8升级至Centos 8 Stream

    文章目录 一 背景 xff1a 二 分析 xff1a 三 升级步骤 xff1a 四 成功安装 openstack 软件仓库参考链接 xff1a 一 背景 xff1a 因使用华为云ecs部署 openstack yoga 版本过程中 xff0
  • Ceph OSD为DOWN时修复

    本文所使用Ceph版本为luminous 不同版本删除OSD基本操作相同 xff09 xff0c 当出现Ceph OSD为down的情况时 xff0c 可以通过以下方法解决 xff08 假设ceph admin节点OSD 1 Down xf
  • 【Anaconda创建虚拟环境】报错及解决办法

    Q1 CondaHTTPError HTTP 000 CONNECTION FAILED for url 错误原因 xff1a 下载网速过慢 xff0c 时间过长 xff0c 自动断开 解决方法 xff1a 在下载命令前加入 conda c
  • 二叉树的绘制

    目录 一 知乎方法 二 动手实践 DOT 语言 无向图 有向图 绘制二叉树 设置属性 如何绘制优美的二叉树 一 知乎方法 知乎上的大佬提供了一系列画图的方法 xff0c 感兴趣的朋友可以自行去看看 用 Graphviz 绘制一棵漂亮的二叉树