import Utils.TreeNode
import Utils.TreeNode.preOrderTraversalWithRecursive
class BuildTree {
/*
* 根据一棵树的前序遍历与中序遍历构造二叉树。
* 注意:
* 你可以假设树中没有重复的元素。
* 例如,给出
* 前序遍历 preorder = [3,9,10,20,15,7]
* 中序遍历 inorder = [10,9,3,15,20,7]
* 返回如下的二叉树:
3
/ \
9 20
/ / \
10 15 7
* */
fun buildTree(preorder: IntArray, inorder: IntArray): TreeNode? {
if (preorder.size == 0) {
return null
}
if (preorder.size == 1) {
return TreeNode(preorder[0])
}
val rootNode = preorder[0]
var rootIndex: Int = 0
for ((index, value) in inorder.withIndex()) {
if (rootNode == value) {
//2
rootIndex = index
}
}
val treeNode = TreeNode(rootNode)
treeNode.left = buildTree(preorder.sliceArray(1..rootIndex), inorder.sliceArray(0 until (rootIndex)))
treeNode.right = buildTree(preorder.sliceArray(rootIndex + 1 until preorder.size), inorder.sliceArray(rootIndex + 1 until inorder.size))
return treeNode
}
}
fun main() {
preOrderTraversalWithRecursive(BuildTree().buildTree(intArrayOf(3, 9,10, 20, 15, 7), intArrayOf(10,9, 3, 15, 20, 7)))
}
网友评论