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練習-二叉樹查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.