自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java編程內(nèi)功-數(shù)據(jù)結(jié)構(gòu)與算法「順序二叉樹(shù)」

開(kāi)發(fā) 后端 算法
從數(shù)據(jù)存儲(chǔ)來(lái)看,數(shù)組存儲(chǔ)方式和樹(shù)的存儲(chǔ)方式可以相互轉(zhuǎn)換,即數(shù)組可以轉(zhuǎn)換成樹(shù),樹(shù)可以轉(zhuǎn)換成數(shù)組。

 基本概念

從數(shù)據(jù)存儲(chǔ)來(lái)看,數(shù)組存儲(chǔ)方式和樹(shù)的存儲(chǔ)方式可以相互轉(zhuǎn)換,即數(shù)組可以轉(zhuǎn)換成樹(shù),樹(shù)可以轉(zhuǎn)換成數(shù)組。如下圖所示:


順序存儲(chǔ)二叉樹(shù)的特點(diǎn):

  1. 順序存儲(chǔ)通常只考慮完全二叉樹(shù);
  2. 第n個(gè)元素的左子節(jié)點(diǎn)為 2 * n+1;
  3. 第n個(gè)元素的右子節(jié)點(diǎn)為 2 * n+2;
  4. 第n個(gè)元素的父節(jié)點(diǎn)為 (n-1)/2;
  5. n 表示二叉樹(shù)中的第幾個(gè)元素(按0開(kāi)始編號(hào)如上圖所示);

需求

要求給定一個(gè)數(shù)組{1,2,3,4,5,6,7},要求以二叉樹(shù)前序遍歷的方式進(jìn)行遍歷,前序遍歷的結(jié)果應(yīng)當(dāng)為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("順序存儲(chǔ)二叉樹(shù)的前序遍歷數(shù)組"); 
  13.         arrBinaryTree.preOrder(0); 
  14.         System.out.println(); 
  15.         System.out.println("順序存儲(chǔ)二叉樹(shù)的中序遍歷數(shù)組"); 
  16.         arrBinaryTree.infixOrder(0); 
  17.         System.out.println(); 
  18.         System.out.println("順序存儲(chǔ)二叉樹(shù)的后序遍歷數(shù)組"); 
  19.         arrBinaryTree.postOrder(0); 
  20.         System.out.println(); 
  21.  
  22.         /** 
  23.          * 順序存儲(chǔ)二叉樹(shù)的前序遍歷數(shù)組 
  24.          * 1 2 4 5 3 6 7 
  25.          * 順序存儲(chǔ)二叉樹(shù)的中序遍歷數(shù)組 
  26.          * 2 4 5 1 3 6 7 
  27.          * 順序存儲(chǔ)二叉樹(shù)的后序遍歷數(shù)組 
  28.          * 2 4 5 3 6 7 1 
  29.          */ 
  30.  
  31.     } 
  32.  
  33. //實(shí)現(xiàn)順序存儲(chǔ)二叉樹(shù)遍歷 
  34. class ArrBinaryTree { 
  35.     private int[] arr;//存儲(chǔ)數(shù)據(jù)節(jié)點(diǎn)的數(shù)組 
  36.  
  37.     public ArrBinaryTree(int[] arr) { 
  38.         this.arr = arr; 
  39.     } 
  40.  
  41.     /** 
  42.      * 編寫一個(gè)方法,完成順序存儲(chǔ)二叉樹(shù)的前序遍歷。 
  43.      * 
  44.      * @param index 數(shù)組的下標(biāo) 
  45.      */ 
  46.     public void preOrder(int index) { 
  47.         if (arr == null || arr.length == 0) { 
  48.             System.out.println("數(shù)組為空,不能按照二叉樹(shù)的前序遍歷"); 
  49.         } 
  50.         //輸出當(dāng)前的元素 
  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.      * 編寫一個(gè)方法,完成順序存儲(chǔ)二叉樹(shù)的中序遍歷。 
  64.      * 
  65.      * @param index 
  66.      */ 
  67.     public void infixOrder(int index) { 
  68.         if (arr == null || arr.length == 0) { 
  69.             System.out.println("數(shù)組為空,不能按照二叉樹(shù)的前序遍歷"); 
  70.         } 
  71.  
  72.         //向左遞歸遍歷 
  73.         if ((2 * index + 1) < arr.length) { 
  74.             preOrder(2 * index + 1); 
  75.         } 
  76.  
  77.         //輸出當(dāng)前的元素 
  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.      * 編寫一個(gè)方法,完成順序存儲(chǔ)二叉樹(shù)的后序遍歷。 
  89.      * 
  90.      * @param index 
  91.      */ 
  92.     public void postOrder(int index) { 
  93.         if (arr == null || arr.length == 0) { 
  94.             System.out.println("數(shù)組為空,不能按照二叉樹(shù)的前序遍歷"); 
  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.         //輸出當(dāng)前的元素 
  108.         System.out.print(arr[index] + " "); 
  109.  
  110.     } 
  111.  

 【編輯推薦】

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2021-04-01 10:34:18

Java編程數(shù)據(jù)結(jié)構(gòu)算法

2021-03-22 09:00:22

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-29 10:13:47

Java編程數(shù)據(jù)結(jié)構(gòu)算法

2020-11-02 09:15:47

算法與數(shù)據(jù)結(jié)構(gòu)

2021-03-18 08:44:20

Java數(shù)據(jù)結(jié)構(gòu)算法

2020-09-23 18:25:40

算法二叉樹(shù)多叉樹(shù)

2021-04-19 07:47:42

數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)Tree

2021-04-20 08:37:14

數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)樹(shù)

2021-04-28 20:12:27

數(shù)據(jù)結(jié)構(gòu)創(chuàng)建

2021-04-07 09:26:37

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-24 10:41:04

Java數(shù)據(jù)結(jié)構(gòu)算法

2013-01-30 10:34:02

數(shù)據(jù)結(jié)構(gòu)

2021-04-13 09:37:41

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-09 06:30:32

JAVA數(shù)據(jù)結(jié)構(gòu)算法

2021-05-12 09:07:09

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-23 09:12:09

Java數(shù)據(jù)結(jié)構(gòu)算法

2023-04-06 07:39:48

2021-01-07 08:12:47

數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)樹(shù)

2021-03-17 09:27:36

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-10 08:42:19

Java數(shù)據(jù)結(jié)構(gòu)算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)