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

开发 后端 算法
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树可以转换成数组。

 基本概念

从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树可以转换成数组。如下图所示:


顺序存储二叉树的特点:

  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.  * @author: xiexiaofei 
  5.  * @date: 2020-02-09 20:04 
  6.  * @description: 
  7.  */ 
  8. public class ArrBinaryTreeDemo { 
  9.     public static void main(String[] args) { 
  10.         int[] arr = {1, 2, 3, 4, 5, 6, 7}; 
  11.         ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr); 
  12.         System.out.println("顺序存储二叉树的前序遍历数组"); 
  13.         arrBinaryTree.preOrder(0); 
  14.         System.out.println(); 
  15.         System.out.println("顺序存储二叉树的中序遍历数组"); 
  16.         arrBinaryTree.infixOrder(0); 
  17.         System.out.println(); 
  18.         System.out.println("顺序存储二叉树的后序遍历数组"); 
  19.         arrBinaryTree.postOrder(0); 
  20.         System.out.println(); 
  21.  
  22.         /** 
  23.          * 顺序存储二叉树的前序遍历数组 
  24.          * 1 2 4 5 3 6 7 
  25.          * 顺序存储二叉树的中序遍历数组 
  26.          * 2 4 5 1 3 6 7 
  27.          * 顺序存储二叉树的后序遍历数组 
  28.          * 2 4 5 3 6 7 1 
  29.          */ 
  30.  
  31.     } 
  32.  
  33. //实现顺序存储二叉树遍历 
  34. class ArrBinaryTree { 
  35.     private int[] arr;//存储数据节点的数组 
  36.  
  37.     public ArrBinaryTree(int[] arr) { 
  38.         this.arr = arr; 
  39.     } 
  40.  
  41.     /** 
  42.      * 编写一个方法,完成顺序存储二叉树的前序遍历。 
  43.      * 
  44.      * @param index 数组的下标 
  45.      */ 
  46.     public void preOrder(int index) { 
  47.         if (arr == null || arr.length == 0) { 
  48.             System.out.println("数组为空,不能按照二叉树的前序遍历"); 
  49.         } 
  50.         //输出当前的元素 
  51.         System.out.print(arr[index] + " "); 
  52.         //向左递归遍历 
  53.         if ((2 * index + 1) < arr.length) { 
  54.             preOrder(2 * index + 1); 
  55.         } 
  56.         //向右递归 
  57.         if ((2 * index + 2) < arr.length) { 
  58.             preOrder(2 * index + 2); 
  59.         } 
  60.     } 
  61.  
  62.     /** 
  63.      * 编写一个方法,完成顺序存储二叉树的中序遍历。 
  64.      * 
  65.      * @param index 
  66.      */ 
  67.     public void infixOrder(int index) { 
  68.         if (arr == null || arr.length == 0) { 
  69.             System.out.println("数组为空,不能按照二叉树的前序遍历"); 
  70.         } 
  71.  
  72.         //向左递归遍历 
  73.         if ((2 * index + 1) < arr.length) { 
  74.             preOrder(2 * index + 1); 
  75.         } 
  76.  
  77.         //输出当前的元素 
  78.         System.out.print(arr[index] + " "); 
  79.  
  80.         //向右递归 
  81.         if ((2 * index + 2) < arr.length) { 
  82.             preOrder(2 * index + 2); 
  83.         } 
  84.  
  85.     } 
  86.  
  87.     /** 
  88.      * 编写一个方法,完成顺序存储二叉树的后序遍历。 
  89.      * 
  90.      * @param index 
  91.      */ 
  92.     public void postOrder(int index) { 
  93.         if (arr == null || arr.length == 0) { 
  94.             System.out.println("数组为空,不能按照二叉树的前序遍历"); 
  95.         } 
  96.  
  97.         //向左递归遍历 
  98.         if ((2 * index + 1) < arr.length) { 
  99.             preOrder(2 * index + 1); 
  100.         } 
  101.  
  102.         //向右递归 
  103.         if ((2 * index + 2) < arr.length) { 
  104.             preOrder(2 * index + 2); 
  105.         } 
  106.  
  107.         //输出当前的元素 
  108.         System.out.print(arr[index] + " "); 
  109.  
  110.     } 
  111.  

 【编辑推荐】

 

责任编辑:姜华 来源: 今日头条
相关推荐

2021-04-01 10:34:18

Java编程数据结构算法

2021-03-22 09:00:22

Java数据结构算法

2021-03-29 10:13:47

Java编程数据结构算法

2020-11-02 09:15:47

算法与数据结构

2021-03-18 08:44:20

Java数据结构算法

2020-09-23 18:25:40

算法二叉树多叉树

2021-04-20 08:37:14

数据结构二叉树

2021-04-19 07:47:42

数据结构二叉树Tree

2021-04-07 09:26:37

Java数据结构算法

2021-04-28 20:12:27

数据结构创建

2021-03-24 10:41:04

Java数据结构算法

2021-03-09 06:30:32

JAVA数据结构算法

2021-04-13 09:37:41

Java数据结构算法

2021-05-12 09:07:09

Java数据结构算法

2013-01-30 10:34:02

数据结构

2021-04-23 09:12:09

Java数据结构算法

2023-04-06 07:39:48

2021-03-10 08:42:19

Java数据结构算法

2021-03-08 06:28:57

JAVA数据结构与算法稀疏数组

2021-03-17 09:27:36

Java数据结构算法
点赞
收藏

51CTO技术栈公众号