
基本概念从数据存储来看,编程数组存储方式和树的内功存储方式可以相互转换,即数组可以转换成树,数据算法顺序树可以转换成数组。结构如下图所示:  顺序存储二叉树的叉树特点: 顺序存储通常只考虑完全二叉树; 第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技术网坏? |