前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >树(4)

树(4)

作者头像
JusterZhu
发布2022-12-07 20:18:40
1720
发布2022-12-07 20:18:40
举报
文章被收录于专栏:JusterZhuJusterZhu

顺序存储二叉树

从数据存储来看,数组存储发昂是和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。

问题

(1)上图的二叉树的节点,要求以数组的方式来存放。array【1,2,3,4,5,6,7】

(2)在遍历数组array时,仍然可以以前、中、后序遍历方式完成节点的遍历。可称为顺序存储二叉树。

概念

顺序存储二叉树的特点如下:

(1)顺序二叉树通常只考虑完全二叉树

(2)第n个元素的左子节点为2*n+1

(3)第n个元素的右子节点为2*n+2

(4)第n个元素的父节点为(n-1)/2

n表示二叉树中的第几个元素(从0开始编号,如图)

代码

代码语言:javascript
复制
    internal class ArrayBinaryTree
    {
        private int[] array;

        public ArrayBinaryTree(int[] array)
        {
           this.array = array;
        }

        public void PreOrder()
        {
            //如果数组为空,或者array.length = 0
            if (array == null || array.Length == 0)
            {
                Console.WriteLine("数组为空,不能按照二叉树的前序遍历");
            }
            //输出当前这个元素
            Console.WriteLine(array[0]);
            //向左递归遍历
            if (2 * 0 + 1 < array.Length)
            {
                PreOrder(2 * 0 + 1);
            }
            //向右递归遍历
            if (2 * 0 + 2 < array.Length)
            {
                PreOrder(2 * 0 + 2);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="index">数组下标</param>
        public void PreOrder(int index)
        {
            //如果数组为空,或者array.length = 0
            if (array == null || array.Length == 0)
            {
                Console.WriteLine("数组为空,不能按照二叉树的前序遍历");
            }
            //输出当前这个元素
            Console.WriteLine(array[index]);
            //向左递归遍历
            if (2 * index + 1 < array.Length)
            {
                PreOrder(2 * index + 1);
            }
            //向右递归遍历
            if (2 * index + 2 < array.Length)
            {
                PreOrder(2 * index + 2);
            }
        }
    }

调用

代码语言:javascript
复制
        static void Main(string[] args)
        {
            int[] array = { 1, 2, 3, 4, 5, 6, 7 };
            ArrayBinaryTree arrayBinaryTree = new ArrayBinaryTree(array);
            arrayBinaryTree.PreOrder();
            Console.Read();
        }

在八大排序算法中的堆排序,就会使用到顺序存储二叉树。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 顺序存储二叉树
    • 问题
      • 概念
        • 代码
          • 调用
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档