Scala练习-二叉树查找

Posted Q博士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
  


以上是关于Scala练习-二叉树查找的主要内容,如果未能解决你的问题,请参考以下文章

二叉树遍历练习题

二叉树基础练习

数据结构——二叉树的基础练习题(单值二叉树,翻转二叉树,相同的树,对称二叉树,另一颗子树,二叉树的前序遍历)

数据结构之二叉树基础OJ练习另一颗树的子树

查找二叉树(插入删除查找)实现

二叉树学习笔记之二叉查找树(BSTree)