C语言简单直观打印二叉树

【C语言】打印二叉树树形(制表符实现,清晰+高拓展)(2022-10-22 更新—偏移量说明) —— 目录 ——0. 前言1. 效果展示2. 核心代码及解读3. 辅助代码 0. 前言 上 优快云 找了很多份树形代码,一个共通的感觉就是拓展性不够强 比如说树大了节点之间被撑开无法兼容性不好 没有使用树枝连接的画显示稍显混乱,使用斜线当树枝又不好拓展 还有一部分就是代码太冗长看不懂 基于此,我打算用回制表符,力求清晰显示出树形 肝了几个小时的代码,过程中一点一点调出来树形 代码部分也在不断优化,思路在不断的调试中也不断改变 最后总结出一种以绝对偏移量画树形的方法,下边将一一对代码进行解释 1. 效果展 阅读详情

最直观的打印二叉树,只能用队列记录二叉树的层次遍历,并记录每个节点的层数及这层里的列数,最后再调整位置打印输出。这样的方法实现起来非常麻烦,所以大多打印二叉树的方法都是采用逆90度输出的方法.
如有二叉树如下:
在这里插入图片描述

逆90度的输出:

在这里插入图片描述实现的方法:每个节点都是独立的一行,记录当前是第几层次,根据层数控制输出位置。从最右节点开始输出,再输出根节点,最后输出左节点.

void printTree(node_t *n)
{
	static int level = -1; //记录是第几层次
	int i;

	if (NULL == n)
		return;

	level++;
	printTree(n->right);
	level--;

	level++;
	for (i = 0; i < level; i++)
		printf("\t");
	printf("%2d\n", n->n);
	printTree(n->left);
	level--;
}

////////////////////////////////////////////////////////////////////////////
上面方法已可以显示二叉树,但因没有"/" “\“符号,对左右节点并不好区分.所以代码里再加上符号的处理,这里有两种打印方式。一种是”/” "\"左右节点符号单独作一行,另一种是符号与节点数据作一行.
具体完整代码:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node {
	int n;
	struct node *left, *right;
}node_t;

void printTree(node_t *n, int type,  int level);
void printTree2(node_t *n, int type,  int level);
void insertTree(node_t **head, int val);
#define LEN 9
int main(void)
{
	node_t *root = NULL;
	int i, num[LEN] = {77, 66, 88, 55, 70, 80, 99, 44, 60};

	for (i = 0; i < LEN; i++)
		insertTree(&root, num[i]);

	printTree(root, 0,  0);
	printf("\n##################\n");
	printTree2(root, 0,  0);	
	return 0;
}

// 打印二叉树:   type : 0表示根节点,1表示左节点,2表示右节点. level表示层次,用于控制显示的距离
void printTree(node_t *n, int type,  int level)
{
	int i;

	if (NULL == n)
		return;

	printTree(n->right, 2, level+1);
	switch (type)
	{
	case 0:
		printf("%2d\n", n->n);
		break;
	case 1:
		for (i = 0; i < level; i++)	
			printf("\t");
		printf("\\\n");
		for (i = 0; i < level; i++)	
			printf("\t");
		printf("  %2d\n", n->n);

		break;
	case 2:

		for (i = 0; i < level; i++)	
			printf("\t");
		printf(" %2d\n", n->n);
		for (i = 0; i < level; i++)	
			printf("\t");
		printf("/\n");
		break;	
	}
	printTree(n->left, 1,  level+1);
}

// 打印二叉树:   type : 0表示根节点,1表示左节点,2表示右节点. level表示层次,用于控制显示的距离
void printTree2(node_t *n, int type,  int level)
{
	int i;

	if (NULL == n)
		return;

	printTree2(n->right, 2, level+1);
	switch (type)
	{
	case 0:
		printf("%2d\n", n->n);
		break;
	case 1:
		for (i = 0; i < level; i++)	
			printf("\t");
		printf("\\ %2d\n", n->n);
		break;
	case 2:
		for (i = 0; i < level; i++)	
			printf("\t");
		printf("/ %2d\n", n->n);
		break;	
	}
	printTree2(n->left, 1,  level+1);
}


void insertTree(node_t **head, int val)
{
	node_t *new = malloc(sizeof(*new)), *tmp;

	new->left = new->right = NULL;
	new->n = val;

	if (NULL == *head)
	{
		*head = new;
		return;
	}

	tmp = *head;
	while (1)	
	{		
		while ((tmp->right != NULL) && (new->n > tmp->n))
			tmp = tmp->right;
		if ((new->n > tmp->n) && (tmp->right == NULL))
			break;
		
		while ((tmp->left != NULL) && (new->n <= tmp->n))
			tmp = tmp->left;
		if ((new->n <= tmp->n) && (tmp->left == NULL))
			break;
	}
	if (new->n > tmp->n)
		tmp->right = new;
	else
		tmp->left = new;	

}

效果图:
在这里插入图片描述

控制台图形化打印二叉树(c/c++) 用c/c++实现的控制台图形化打印二叉树 阅读详情

相关推荐

树状显示二叉树(标准C语言实现)

二叉搜索树的黑框树状显示(标准C语言实现) 最近在用C语言实现平衡二叉搜索树,用了半天时间实现了树的基本功能后,发现我的二叉树打印方法还是停留在简单的逐行打印,此时的效果图如下: 一行的每两个数值分别对应上一行一个数值的左右孩子,用星号表示空。无疑这中表示方法十分鸡肋,利用人工点数的方式确定节点的左右孩子,实在不方便调试和扩展功能,如果节点多了可能还会造成开发者白内障,危害极大。 出于开发效率和...

weixin_40568729的博客 1万+

二叉树的打印c语言版

学习平衡二叉树打过程中想到了一种短小的递归实现的树结构打印方法,分享给大家,欢迎讨论。

qq_39712315的博客 2587

树状打印二叉树 C语言课程设计

[问题描述]   按树状形式打印二叉树结构,即二叉树的根在屏幕的最上边,二叉树的左子树在屏幕的左下方,二叉树的右子树在屏幕的右下边。 [测试数据]   由学生依据软件工程的测试技术自己确定。注意测试边界数据,如空二叉树。 [实现提示]   (1)利用RDL遍历方法;   (2)利用结点的深度控制横向位置。

二叉树生成与打印显示 c语言实现

目录程序效果接口使用举例完整的程序 程序效果 刷题时有个二叉树可视化的程序就好了,于是乎自己写了一个。将"__Tree codes.cpp"及"__Tree codes.h"导入即可使用。 一个 bt_print(root) 函数即可完成二叉树可视化。 先上二叉树打印效果图: 接口 从数组生成二叉树的函数以及打印二叉树的函数为: // 从nums数组生成二叉树。数组元素须为小于等与999的正整数...

weixin_43512663的博客 8137

C语言打印二叉树

打印二叉树,高度为4内的,可完美打印二叉树

PrintBTree.zip_print_btree_二叉树 图形化_打印二叉树

图形化打印二叉树 方便在控制台中浏览你所生成的二叉树

C语言实现堆排序

#include void printfTree(int* tree,int size){ int i; int j; int temp; int sum; i=0; j=1; sum=j; while(i temp=tree[i]; printf("%d\t",temp); i++; if(i==sum){ printf("\n"); j*=2; sum+=j;

qq_32044045的博客 315

Innovus ECO技巧:用setEcoMode+ecoAddRepeater实现批量buffer替换的5个关键步骤

本文详细介绍了在Cadence Innovus工具中,利用setEcoMode与ecoAddRepeater命令实现高效、批量Buffer/Inverter替换的工程化策略。通过启用批处理模式、构建可维护的替换规则、掌握高级定位技巧以及规避布线陷阱等5个关键步骤,帮助芯片设计工程师在ECO阶段大幅提升修改效率与质量,确保设计稳定签核。

d6e7f8的博客 1117

直观地打印二叉树

public class PrintBinaryTree { //二叉树节点的定义 public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } //打

ZCC的专栏 861

Element Server Suite社区版Helm部署:私有Matrix聊天服务器快速搭建指南

在云原生和微服务架构日益普及的今天,容器化部署已成为现代应用交付的标准范式。Kubernetes作为容器编排的事实标准,通过声明式配置和自动化管理,极大地简化了复杂分布式系统的部署与运维。Helm作为Kubernetes的包管理器,通过预定义的Chart模板,将应用及其依赖打包,实现了真正的“一键部署”,显著提升了部署效率和可重复性。这种技术组合的价值在于,它让开发者能够专注于业务逻辑,而非底层基础设施的复杂性,尤其适用于需要快速搭建、易于维护的服务场景。Element Server Suite Commu

weixin_42610010的博客 299

ubuntu安装glibc

VSCode 在ubuntu下调试无法打开libc-start.c raise.c等1. 安装glibc2. launch.json中添加路径映射3. 调试 1. 安装glibc apt install glibc-source cd /usr/src/glibc/ sudo tar -xvf glibc-[VERSION].tar.xz 2. launch.json中添加路径映射 "sourceFileMap": { "/build/glibc-S7xCS9": "/usr/src/glib

wq_0708的博客 3万+

打印二叉树形状(C语言版本)

还在用手画二叉树?

m0_62135731的博客 2103

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6546

【C】二叉树打印

对于LeetCode练习时,有时需要直观的将树打印,提供如下demo供参考 #include "stdio.h" #include "string.h" struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; int *ArrIn(int *pArrSize); struct TreeNode *TreeIn(int *arr, int arrSize, int curIndex);

一路前行 1357

别再自己造轮子了!用MONAI Model Zoo里的预训练模型,5分钟搞定医学影像AI项目

本文介绍了如何利用MONAI Model Zoo中的预训练模型快速搭建医学影像AI项目,大幅节省开发时间和计算资源。通过实战案例展示了UNet、DenseNet121等核心模型的应用技巧,帮助临床医生和研究者5分钟内启动高质量医学影像分析,特别适合小样本场景下的病灶分割和分类任务。

weixin_33704234的博客 238

一文搞懂雷达脉冲压缩和匹配滤波器

为了解决传统单频脉冲雷达面临的作用距离和空间分辨力之间的矛盾,脉冲压缩理论被提出。在接收端设计一个和发射信号能够“共轭匹配”的网络来实现脉冲压缩。接收到的回波信号通过匹配滤波器时,滤波器的增益在信号越强的频率点越大;在信号越弱的频率点,增益越小,通过这样的方式使信号在时域更加集中。脉冲压缩技术大致可分为线性调频(LFM)和相位编码。其中LFM信号易于通过硬件或各种技术产生,但是进行匹配滤波后主旁瓣比高达13.2dB,在检测多个目标时,强目标的回波旁瓣可能会把弱小信号覆盖,导致弱小信号的检测受到影响。

FPGA入门到跑路 9935

直观打印二叉树

public class Code_02_PrintBinaryTree { public static class Node { public int value; public Node left; public Node right; public Node(int data) { thi...

241

三模冗余、纠错编码、单粒子翻转防护

本文探讨了高可靠性FPGA系统设计的三大关键技术:三模冗余(TMR)、纠错编码(ECC)和单粒子翻转(SEU)防护。TMR通过三个并行模块和表决器实现容错,但会增加硬件资源和功耗;ECC利用汉明码等编码方式检测和纠正数据错误,适用于存储器保护;SEU防护则针对高能粒子引发的位翻转问题,采用配置刷新、TMR和ECC等方法。文章还通过Verilog代码示例展示了这些技术的实现,并提出了一个综合应用案例,结合三种技术构建高可靠性控制系统。这些技术在航空航天、医疗设备等关键领域具有重要应用价值。

2301_79143213的博客 715

数据结构--创建并输出二叉树的c语言实现(超详细注释/实验报告)

之前我们都是学习的线性结构,这次我们就开始学习非线性结构——树。线性结构中结点间具有唯一前驱、唯一后继关系,而非线性结构中结点的前驱、后继的关系并不具有唯一性。在树结构中,节点间关系是前驱唯一而后继不唯一,即结点之间是一对多的关系。直观地看,树结构是具有分支关系的结构(其分叉、分层的特征类似于自然界中的树)。树结构应用非常广泛,特别是在大量数据处理(如在文件系统、编译系统、目录组织等)方面显得更加突出。

池塘春草梦的博客 1万+

YOLOv11改进 - 卷积Conv | PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测 | AAAI 2025

本文介绍了风车状卷积(PConv)和基于尺度的动态(SD)损失在YOLOv11中的结合应用。PConv采用不对称填充,通过特殊结构设计、卷积运算和分组卷积技术,能更好地适应红外小目标的像素高斯空间分布,在少量增加参数的情况下极大扩展感受野。SD损失可根据目标大小动态调整尺度和位置损失的影响。我们将PConv集成到YOLOv11的主干网络低层,并在相关配置文件中进行设置。实验证明,YOLOv11 - PConv在IRSTD - 1K和SIRST - UAVB数据集上取得显著性能提升,验证了方法的有效性和泛化能

魔改工程师的博客 1334

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怎么用c语言打印树的图形,C语言打印二叉树

由于代码很多,所以分开几篇介绍了,看不懂的可以看上一篇,本篇加入了树枝,看起来更直观,不过加这个树枝,算那个横线和空格花了我不少时间,不过最后能写出来,挺爽。上一篇http://blog.youkuaiyun.com/xzongyuan/article/details/21945749C语言打印二叉树在广度遍历的时候,有非常繁杂的计算符号的方法,要看懂可能得花时间。(1)整个设计的难点在sprintf函数运用...

weixin_30599521的博客 1205

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

算法:如何较为直观地打印二叉树

二叉树可以用常规的三种遍历结果来描述其结构,但是不够直观,尤其是二叉树中有重复 值的时候,仅通过三种遍历的结果来构造二叉树的真实结构更是难上加难,有时则根本不可能。 给定一棵二叉树的头节点 head,已知二叉树节点值的类型为 32 位整型,请实现一个打印二叉 树的函数,可以直观地展示树的形状,也便于画出真实的结构。(1)第一步要解决的问题是用什么样的方式可以无歧义的打印二叉树,也就是设计打印的样式。这里我们是这样做的:假设有二叉树如下 打印出的样式如下:怎么看呢?(2)第二个要解决的问题:规定节点打印时占

OceanStar的博客 1181

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C语言树形打印二叉树

学习二叉树时,如果能直观显示,测试程序的时候会方便许多。 实现树形打印的标准方法是利用队列,此处参考的是优快云上的一篇文章:树状显示二叉树, 原程序使用C++实现,这里使用C。 算法中使用了两个队列,一个用于存储树的结点,另一个用于存储打印过程中每个结点对应的信息。 上一篇文章写了可以利用 void 指针来实现模板,这一次嫌麻烦没有用这个方法,复制粘贴了两个队列。 改天试一试能不能把 v...

weixin_33670786的博客 2685

C语言打印以二叉树存储的树,C语言树形打印二叉树

1 #include"BST.h"2 #define TRUE 13 #define FALSE 045 //the Queue of TreeNodes.67 Queue CreateQ(void)8 {9 Queue Q = (Queue)malloc(sizeof(structQrec));10 if(!Q)11 Error1("out of space fo...

weixin_33687939的博客 967

【算法】【二叉树模块】控制台直观打印二叉树方法

二叉树控制台展示方法

qq_39760347的博客 555
上一篇: 29 使用内核里的W25Q32设备驱动
下一篇: QT5.12在linux下编译使用mysql数据库驱动
jklinux
博客等级 码龄10年 1060粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值