题解 | #重建二叉树#
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
kotlin
/**
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
object Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param pre int整型一维数组
* @param vin int整型一维数组
* @return TreeNode类
*/
var pos = 0
fun reConstructBinaryTree(pre: IntArray,vin: IntArray): TreeNode? {
if(pre.size == 0) return null
//类似二分法求解,因为一个数组前序遍历,然后另外一个中序遍历,前序的第一个元素即为根元素值,
//对应于中序数组的下标就可以将中序数组的值分为左右两部分,即根下标的左边为左子树的所有值,右边为右子树的所有值,以此类推来递归
return dfs(pre, vin, 0, pre.size - 1)
}
private fun dfs(pre: IntArray,vin: IntArray, left: Int, right: Int): TreeNode? {
if(left > right || pos == pre.size) return null
val index = vin.indexOf(pre[pos])
val root = TreeNode(pre[pos])
pos++
val leftNode = dfs(pre, vin, left, index - 1)
val rightNode = dfs(pre, vin, index + 1, right)
root.left = leftNode
root.right = rightNode
return root
}
}
查看22道真题和解析