美文网首页
按树状横向打印二叉树

按树状横向打印二叉树

作者: 周末的游戏之旅 | 来源:发表于2019-08-03 10:40 被阅读0次

问题

假设以二叉链表存储的二叉树中,每个结点所含数据元素均为单字母。 要求实 现二叉树的横向显示问题,如下图所示打印结果。


问题分析

(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>
    {
        T data;
        TreeNode<T> LChrild;
        TreeNode<T> RChirld;
        
        public T Data { get => data; set => data = value; }
        internal TreeNode<T> LChrild1 { get => LChrild; set => LChrild = value; }
        internal TreeNode<T> 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<string> A = new TreeNode<string>("a");
            TreeNode<string> B = new TreeNode<string>("b");
            TreeNode<string> C = new TreeNode<string>("c");
            TreeNode<string> D = new TreeNode<string>("d");
            TreeNode<string> E = new TreeNode<string>("e");
            TreeNode<string> F = new TreeNode<string>("f");
            TreeNode<string> G = new TreeNode<string>("g");
            TreeNode<string> H = new TreeNode<string>("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);
        }

        /// <summary>
        /// 逆中序(RDL)遍历实现横向(从屏幕左到屏幕右)梳妆打印
        /// </summary>
        /// <param name="node"></param>
        /// <param name="space"></param>
        static void PrintTree(TreeNode<string> 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);
        }
    }
}

相关文章

  • 按树状横向打印二叉树

    问题 假设以二叉链表存储的二叉树中,每个结点所含数据元素均为单字母。 要求实 现二叉树的横向显示问题,如下图所示打...

  • [剑指offer]刷题笔记

    按之字顺序打印二叉树 把二叉树打印成多行 按之字顺序打印二叉树【树】【常考!!!】 题目描述:请实现一个函数按照之...

  • 算法(3)层次顺序遍历二叉树

    问题:按照层次顺序遍历二叉树,每层换行打印 1、普通的按层打印二叉树只需要使用队列就可以了2、按层打印二叉树,需要...

  • 二叉树的遍历

    从上往下打印二叉树 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 按之字形顺序打印二叉树 请实现一个函数...

  • Week21 0807--0813

    question 1打印二叉树 给定一个二叉树,按要求打印节点 我的方法: 先用BFS遍历整个树得到按层存储的节点...

  • 剑指offer | 把二叉树打印成多行

    把二叉树打印成多行 从上到下按层打印成多行 分析:使用队列

  • 打印小技巧(下)

    1.文档中有表格,纵向页面横向打印 按【Ctrl+P】快捷键,进入【打印】界面,在打印【设置】中直接把【纵向】改为...

  • 面试题23:从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 代码实现 主要思路 1、从上到下按层打印二叉树,...

  • 面试题32 - II. 从上到下打印二叉树 II

    从上到下打印二叉树 II 题目描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 ...

  • 剑指第三周

    对称的二叉树 其实就是要遍历嘛 按之字形顺序打印二叉树 同样是简单的层次遍历 把二叉树打印成多行 这个更简单了 栈...

网友评论

      本文标题:按树状横向打印二叉树

      本文链接:https://www.haomeiwen.com/subject/iutjdctx.html