1. 程式人生 > 實用技巧 >10-順序二叉樹-Scala實現

10-順序二叉樹-Scala實現

用樹的結構遍歷陣列

package com.atguigu.datastructures.binarytree

object ArrayTreeDemo {
  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5,6,7)
    val arrayTree = new ArrayTree(arr)
    arrayTree.postOrder()
  }
}
class ArrayTree(val arr:Array[Int]){
  //過載
  def preOrder(): Unit ={
    this.preOrder(0)

  }
  def infixOrder(): Unit ={
    this.infixOrder(0)
  }
  def postOrder(): Unit ={
    this.postOrder(0)
  }

  def preOrder(index:Int): Unit ={
    if (arr == null || arr.length == 0){
      println("陣列為空,不能按照二叉樹前序遍歷")
    }
    println(arr(index))
    //向左遞迴遍歷
    if ((index*2 + 1) < arr.length){
      preOrder(index*2 + 1)
    }
    //向右遞迴遍歷
    if ((index*2 + 2) < arr.length){
      preOrder(index*2 + 2)
    }
  }

  def infixOrder(index:Int): Unit ={
    if (arr == null || arr.length == 0){
      println("陣列為空,不能按照二叉樹前序遍歷")
    }
    //向左遞迴遍歷
    if ((index*2 + 1) < arr.length){
      infixOrder(index*2 + 1)
    }
    println(arr(index))
    //向右遞迴遍歷
    if ((index*2 + 2) < arr.length){
      infixOrder(index*2 + 2)
    }
  }
  def postOrder(index:Int): Unit ={
    if (arr == null || arr.length == 0){
      println("陣列為空,不能按照二叉樹前序遍歷")
    }
    //向左遞迴遍歷
    if ((index*2 + 1) < arr.length){
      postOrder(index*2 + 1)
    }
    //向右遞迴遍歷
    if ((index*2 + 2) < arr.length){
      postOrder(index*2 + 2)
    }
    println(arr(index))
  }
}