搜索

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

发表于 2025-11-02 14:21:41 来源:全栈开发

 基本概念

从数据存储来看,编程数组存储方式和树的内功存储方式可以相互转换,即数组可以转换成树,数据算法顺序树可以转换成数组。结构如下图所示:

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

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

需求

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

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

代码案例

package com.xie.tree; /**  * @author: xiexiaofei  * @date: 2020-02-09 20:04  * @description:  */ public class ArrBinaryTreeDemo {     public static void main(String[] args) {         int[] arr = {1,数据算法顺序 2, 3, 4, 5, 6, 7};         ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);         System.out.println("顺序存储二叉树的源码库前序遍历数组");         arrBinaryTree.preOrder(0);         System.out.println();         System.out.println("顺序存储二叉树的中序遍历数组");         arrBinaryTree.infixOrder(0);         System.out.println();         System.out.println("顺序存储二叉树的后序遍历数组");         arrBinaryTree.postOrder(0);         System.out.println();         /**          * 顺序存储二叉树的前序遍历数组          * 1 2 4 5 3 6 7          * 顺序存储二叉树的中序遍历数组          * 2 4 5 1 3 6 7          * 顺序存储二叉树的后序遍历数组          * 2 4 5 3 6 7 1          */     } } //实现顺序存储二叉树遍历 class ArrBinaryTree {     private int[] arr;//存储数据节点的数组     public ArrBinaryTree(int[] arr) {         this.arr = arr;     }     /**      * 编写一个方法,完成顺序存储二叉树的结构前序遍历。      *      * @param index 数组的叉树下标      */     public void preOrder(int index) {         if (arr == null || arr.length == 0) {             System.out.println("数组为空,不能按照二叉树的编程前序遍历");         }         //输出当前的元素         System.out.print(arr[index] + " ");         //向左递归遍历         if ((2 * index + 1) < arr.length) {             preOrder(2 * index + 1);         }         //向右递归         if ((2 * index + 2) < arr.length) {             preOrder(2 * index + 2);         }     }     /**      * 编写一个方法,完成顺序存储二叉树的b2b供应网内功中序遍历。      *      * @param index      */     public void infixOrder(int index) {         if (arr == null || arr.length == 0) {             System.out.println("数组为空,数据算法顺序不能按照二叉树的结构前序遍历");         }         //向左递归遍历         if ((2 * index + 1) < arr.length) {             preOrder(2 * index + 1);         }         //输出当前的元素         System.out.print(arr[index] + " ");         //向右递归         if ((2 * index + 2) < arr.length) {             preOrder(2 * index + 2);         }     }     /**      * 编写一个方法,完成顺序存储二叉树的叉树后序遍历。      *      * @param index      */     public void postOrder(int index) {         if (arr == null || arr.length == 0) {             System.out.println("数组为空,不能按照二叉树的前序遍历");         }         //向左递归遍历         if ((2 * index + 1) < arr.length) {             preOrder(2 * index + 1);         }         //向右递归         if ((2 * index + 2) < arr.length) {             preOrder(2 * index + 2);         }         //输出当前的元素         System.out.print(arr[index] + " ");     } } 

 【编辑推荐】

5分钟让你理解K8S必备架构概念,以及网络模型 92年百度程序员被抓,给我们警示什么? 开源云盘利器:Nextcloud 21私有云盘搭建 更纯净,微软 Windows10 21H2 重大更新将减少系统臃肿软件数量 996工作制究竟是好是IT技术网坏?
随机为您推荐
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by Java编程内功-数据结构与算法「顺序二叉树」,全栈开发  滇ICP备2023006006号-32sitemap

回顶部