Scala練習-二叉樹查找

源碼


package day15

/**
  * Created by doctorq on 2017/6/30.
  * http://blog.csdn.net/chinabhlt/article/details/47420391
  * 二叉樹查找
  */
object BinaryTreeSearch extends App {
  //先序,根節點->左子樹->右子樹
  def perOrder(node: BinaryTreeNode): Unit = {

    println(node.value)

    if (node.left != None) {
      //      println(s"根節點:${node.value},左子節點:${node.left.get.value}")
      perOrder(node.left.get)
    }

    if (node.right != None) {
      //      println(s"根節點:${node.value},右子節點:${node.right.get.value}")
      perOrder(node.right.get)
    }

  }

  //中序,左子樹->根節點->右子樹
  def inOrder(node: BinaryTreeNode): Unit = {

    if (node.left != None) {
      //      println(s"根節點:${node.value},左子節點:${node.left.get.value}")
      perOrder(node.left.get)
    }

    println(node.value)

    if (node.right != None) {
      //      println(s"根節點:${node.value},右子節點:${node.right.get.value}")
      perOrder(node.right.get)
    }

  }

  //後序:左子樹->右子樹->根節點
  def postOrder(node: BinaryTreeNode): Unit = {
    if (node.left != None) {
      //      println(s"根節點:${node.value},左子節點:${node.left.get.value}")
      perOrder(node.left.get)
    }


    if (node.right != None) {
      //      println(s"根節點:${node.value},右子節點:${node.right.get.value}")
      perOrder(node.right.get)
    }

    println(node.value)

  }

  //層序:按深度遍歷,從根節點所在的層開始
  def sequence(node: BinaryTreeNode): Unit = {

  }

  /**
    * 從二叉樹中查找指定值的節點並返回
    * 遞歸的方式
    *
    * @param node 根節點
    * @param value
    */
  def searchNode(node: BinaryTreeNode, value: Int): Option[BinaryTreeNode] = {

    if (value == node.value) {
      return Some(node)
    } else if (value < node.value && node.left != None) {
      return searchNode(node.left.get, value)
    } else if (value > node.value && node.right != None) {
      return searchNode(node.right.get, value)
    }
    None
  }

  var rootNode = new BinaryTreeNode(15)
  val list = List(1, 4, 5, 2, 3, 8, 54, 23, 21, 43, 10, 13).sorted

  list.foreach(item => {
    rootNode.buildTree(new BinaryTreeNode(item))
  })

  println("先序")

  perOrder(rootNode)

  println("中序")

  inOrder(rootNode)

  println("後序")

  postOrder(rootNode)

  val result1 = searchNode(rootNode, 1)

  result1 match {
    case None => println("未發現")
    case node => node.get.printNode()
  }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章