横向打印二叉树 java_按树状横向打印二叉树
问题
假设以二叉链表存储的二叉树中,每个结点所含数据元素均为单字母。 要求实 现二叉树的横向显示问题,如下图所示打印结果。
问题分析
(1) 二叉树的横向显示应是二叉树竖向显示的90°旋转。分析上图可知,这种树形打印格式要求先打印右子树,再打印根,最后打印左子树,按由上而下顺序看,其输出的结点序列为:CFEADB,这恰为逆中序遍历。所以横向显示二叉树的算法为先右子树、再跟结点、再左子树的RDL结构。
(2)在这种输出格式中,结点的左右位置与结点的深度有关,故算法中设置了一个表实当前跟结点层深的参数,以控制输出结点的左、右位置,每当递归进层时层深参数加1。
算法描述
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tree
{
class TreeNode
{
T data;
TreeNode LChrild;
TreeNode RChirld;
public T Data { get => data; set => data = value; }
internal TreeNode LChrild1 { get => LChrild; set => LChrild = value; }
internal TreeNode RChirld1 { get => RChirld; set => RChirld = value; }
public TreeNode(T data)
{
this.Data = data;
}
public TreeNode()
{
this.Data = default(T);
this.LChrild1 = null;
this.RChirld1 = null;
}
}
}
Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tree
{
class Program
{
static int total = 0; //叶子结点数目
static void Main(string[] args)
{
TreeNode A = new TreeNode("a");
TreeNode B = new TreeNode("b");
TreeNode C = new TreeNode("c");
TreeNode D = new TreeNode("d");
TreeNode E = new TreeNode("e");
TreeNode F = new TreeNode("f");
TreeNode G = new TreeNode("g");
TreeNode H = new TreeNode("h");
A.LChrild1 = B;
B.RChirld1 = D;
A.RChirld1 = C;
D.LChrild1 = F;
D.RChirld1 = G;
C.RChirld1 = E;
E.RChirld1 = H;
PrintTree(A, 0);
}
///
/// 逆中序(RDL)遍历实现横向(从屏幕左到屏幕右)梳妆打印
///
///
///
static void PrintTree(TreeNode node,int space)
{
if (node == null)
return;
PrintTree(node.RChirld1, space + 1);
for (int i = 0; i < space; i++)
{
Console.Write(" ");
}
Console.WriteLine(node.Data);
PrintTree(node.LChrild1, space+1);
}
}
}
横向打印二叉树 java_按树状横向打印二叉树相关推荐
- 【数据结构与算法】【14】以树状形式打印二叉树
技术难点 以树状形式打印二叉树的关键难点在于,如何计算和控制每个节点的打印位置 解决思路 将二叉树的所有节点从左往右全部打印出来,正好和二叉树中序遍历的结果是一样的 利用这个特点,我们就可以通过中序遍 ...
- 用二叉树来理解树状数组
树状数组(Fenwick tree,又名binary indexed tree),是一种很实用的数据结构.它通过用节点i,记录数组下标在[ i –2^k + 1, i]这段区间的所有数的信息(其中,k ...
- 横向越权访问java_基于ThinkPhp5开发横向越权逻辑漏洞安全指南
什么是纵向越权逻辑漏洞?纵向越权也是垂直越权指的是一个低级别攻击者尝试访问高级别用户的资源,例如本实验:普通用户获取管理员用户权限进行新增/删除便签操作. 越权漏洞是Web应用程序中一种常见的安全漏洞 ...
- 【数据结构】树状数组详解(Leetcode.315)
前言 最近做题时遇到一个关于树状数组的题力扣https://leetcode-cn.com/problems/count-of-smaller-numbers-after-self/但是CSDN上仅有 ...
- 【数据结构】树状数组
树状数组主要用于解决查询修改等区间操作的问题. 其实它也是线段树的一部分:线段树能做的,树状数组不一定能做:树状数组能做的,线段树一定能做(可能会比较慢). 那么,树状数组的优点: 1.代码简洁好记. ...
- AcWing 蓝桥杯AB组辅导课 05、树状数组与线段树
文章目录 前言 一.树状数组 1.1.树状数组知识点 1.2.树状数组代码模板 模板题:AcWing 1264. 动态求连续区间和 例题 例题1.AcWing 1265. 数星星[中等,信息学奥赛一本 ...
- 二叉树的深度_Golang面试题:二叉树的最大深度
问题:求二叉树的最大深度 给定一个二叉树,返回其最大深度. 示例: 1 / 2 3 / / 4 5 6 7 返回最大深度为3 解题思路 利用深度优先或者广度优先遍历二叉树,找到树的最大深度. 二叉树的 ...
- vue+element实现树状菜单并底层菜单横向排列
参考博文:https://blog.csdn.net/qq_33769914/article/details/81562278 效果如下: 首先用elemnetUI的树形控件,将获取到的数据进行基本展 ...
- file类打印目录---树状结构,递归
package Test; import java.io.File; /** * file类打印目录---树状结构,递归 * @author Administrator * */ public cla ...
最新文章
- 解决kalilinux: E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/
- django in的一点心得
- Interview:算法岗位面试—10.23下午—上海某科技公司算法岗位(偏机器学习算法,上市)技术面试之比赛积累、项目经验、个人未来发展
- 数据的中心化和标准化
- c++ map 获取key列表_好未来Golang源码系列一:Map实现原理分析
- 机器学习(八)Apriori算法学习
- mui.ajax php,求助!!!关于mui ajax获取不到后台数据
- java 多线程——一个定时调度的例子
- 基于深度学习的数字识别GUI的设计
- greenDaoMaster的学习研究
- c++ 中——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
- 3-arm裸机存储器控制器之SDRAM
- 揪心!河南极端暴雨突袭,多地受灾严重!加油,河南
- phpwind不支持php7,PHP论坛程序PHPWind 7发布 新增四个功能
- 交大『云观CD-ROMIII』直接由CD-ROM执行之安装法(转)
- pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮2输出消息、按钮3可退出
- 7.opencv图像对称翻折image-Flip(cv2.flip)
- 联通云服务器安全性能怎么样,云安全解决方案
- Unity角色模型由Generic改成Humanoid之后hips节点动画失效的问题
- 重庆大学c++2022级-期末模拟考试