文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java编程内功-数据结构与算法「顺序二叉树」

2024-12-03 08:59

关注

顺序存储二叉树的特点:

  1. 顺序存储通常只考虑完全二叉树;
  2. 第n个元素的左子节点为 2 * n+1;
  3. 第n个元素的右子节点为 2 * n+2;
  4. 第n个元素的父节点为 (n-1)/2;
  5. n 表示二叉树中的第几个元素(按0开始编号如上图所示);

需求

要求给定一个数组{1,2,3,4,5,6,7},要求以二叉树前序遍历的方式进行遍历,前序遍历的结果应当为1,2,4,5,3,6,7,

附加完成中序遍历和后序遍历。

代码案例

  1. package com.xie.tree; 
  2.  
  3.  
  4. public class ArrBinaryTreeDemo { 
  5.     public static void main(String[] args) { 
  6.         int[] arr = {1, 2, 3, 4, 5, 6, 7}; 
  7.         ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr); 
  8.         System.out.println("顺序存储二叉树的前序遍历数组"); 
  9.         arrBinaryTree.preOrder(0); 
  10.         System.out.println(); 
  11.         System.out.println("顺序存储二叉树的中序遍历数组"); 
  12.         arrBinaryTree.infixOrder(0); 
  13.         System.out.println(); 
  14.         System.out.println("顺序存储二叉树的后序遍历数组"); 
  15.         arrBinaryTree.postOrder(0); 
  16.         System.out.println(); 
  17.  
  18.          
  19.  
  20.     } 
  21.  
  22. //实现顺序存储二叉树遍历 
  23. class ArrBinaryTree { 
  24.     private int[] arr;//存储数据节点的数组 
  25.  
  26.     public ArrBinaryTree(int[] arr) { 
  27.         this.arr = arr; 
  28.     } 
  29.  
  30.      
  31.     public void preOrder(int index) { 
  32.         if (arr == null || arr.length == 0) { 
  33.             System.out.println("数组为空,不能按照二叉树的前序遍历"); 
  34.         } 
  35.         //输出当前的元素 
  36.         System.out.print(arr[index] + " "); 
  37.         //向左递归遍历 
  38.         if ((2 * index + 1) < arr.length) { 
  39.             preOrder(2 * index + 1); 
  40.         } 
  41.         //向右递归 
  42.         if ((2 * index + 2) < arr.length) { 
  43.             preOrder(2 * index + 2); 
  44.         } 
  45.     } 
  46.  
  47.      
  48.     public void infixOrder(int index) { 
  49.         if (arr == null || arr.length == 0) { 
  50.             System.out.println("数组为空,不能按照二叉树的前序遍历"); 
  51.         } 
  52.  
  53.         //向左递归遍历 
  54.         if ((2 * index + 1) < arr.length) { 
  55.             preOrder(2 * index + 1); 
  56.         } 
  57.  
  58.         //输出当前的元素 
  59.         System.out.print(arr[index] + " "); 
  60.  
  61.         //向右递归 
  62.         if ((2 * index + 2) < arr.length) { 
  63.             preOrder(2 * index + 2); 
  64.         } 
  65.  
  66.     } 
  67.  
  68.      
  69.     public void postOrder(int index) { 
  70.         if (arr == null || arr.length == 0) { 
  71.             System.out.println("数组为空,不能按照二叉树的前序遍历"); 
  72.         } 
  73.  
  74.         //向左递归遍历 
  75.         if ((2 * index + 1) < arr.length) { 
  76.             preOrder(2 * index + 1); 
  77.         } 
  78.  
  79.         //向右递归 
  80.         if ((2 * index + 2) < arr.length) { 
  81.             preOrder(2 * index + 2); 
  82.         } 
  83.  
  84.         //输出当前的元素 
  85.         System.out.print(arr[index] + " "); 
  86.  
  87.     } 
  88.  

 【编辑推荐】

  1. 5分钟让你理解K8S必备架构概念,以及网络模型
  2. 92年百度程序员被抓,给我们警示什么?
  3. 开源云盘利器:Nextcloud 21私有云盘搭建
  4. 更纯净,微软 Windows10 21H2 重大更新将减少系统臃肿软件数量
  5. 996工作制究竟是好是坏?

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯