Kotlinは二叉樹の深さ遍歴と広さ遍歴を実現します.
3146 ワード
ことばを引く
今日は、kotlinで二叉の木を作って、トレーナーレベルの小さい制作です.皆さんが好きなように.
知識に触れる
データ構造の知識列 二叉木 ツリーの広さは を遍歴しています.ツリーの深さは を巡回します.
コーツリン知識 Lambada object when 非空判定 data class ノードクラス
ここには追加と遍歴だけ書いてあります.バランスのとれた二叉の木を採用した考えを追加しました.左の子供は親のノードより小さく、右の子供は親のノードより大きいです.
今日は、kotlinで二叉の木を作って、トレーナーレベルの小さい制作です.皆さんが好きなように.
知識に触れる
データ構造の知識
コーツリン知識
data class TreeNode(var value: Int, var leftChild: TreeNode? = null, var rightChild: TreeNode? = null)
二叉樹類ここには追加と遍歴だけ書いてあります.バランスのとれた二叉の木を採用した考えを追加しました.左の子供は親のノードより小さく、右の子供は親のノードより大きいです.
class BinaryTree {
var root: TreeNode? = null
//
fun insert(value: Int) {
val newNode = TreeNode(value)
when (root) {
null -> root = newNode
else -> {
var currentNode: TreeNode? = root
var parentNode: TreeNode
while (true) {
parentNode = currentNode!!
when {
newNode.value > currentNode.value -> {
currentNode = currentNode.rightChild
if (currentNode == null) {
parentNode.rightChild = newNode
return
}
}
else -> {
currentNode = currentNode.leftChild
if (currentNode == null) {
parentNode.leftChild = newNode
return
}
}
}
}
}
}
}
//
fun inOrderDepth(treeNode: TreeNode?) {
if (treeNode != null) {
Log.d("asdasd", " :" + treeNode.value.toString())
inOrderDepth(treeNode.leftChild)
Log.d("qweqwe", " :" + treeNode.value.toString())
inOrderDepth(treeNode.rightChild)
Log.d("zxczxc", " :" + treeNode.value.toString())
}
}
//
fun inOrderWidth(treeNode: TreeNode?) {
if (treeNode == null)
return
val nodelist = ArrayList()
nodelist.add(treeNode)
while (nodelist.size > 0) {
val rnode = nodelist[0];
nodelist.remove(rnode)
Log.d("qazqaz", " " + rnode.value.toString())
rnode.leftChild?.let { nodelist.add(it) }
rnode.rightChild?.let { nodelist.add(it) }
}
}
}
テストクラスobject TreeTest {
var binaryTree = BinaryTree()
fun addAtree() {
binaryTree.insert(10)
binaryTree.insert(3)
binaryTree.insert(8)
binaryTree.insert(5)
binaryTree.insert(100)
binaryTree.insert(20)
binaryTree.insert(50)
}
fun order() {
binaryTree.inOrderDepth(binaryTree.root)
binaryTree.inOrderWidth(binaryTree.root)
}
}
メイン関数を探して呼び出します.TreeTest.addAtree()
TreeTest.order()
いいですLog.dはAndroidの方法で、他のプラットフォームは自分で印刷内容を交替すればいいです.