【leetcode】105.从前序与中序遍历序列构造二叉树

leetcode-105.png

构造树

这一题就要了解前序、中序的性质了
前序开头的就是根节点,中序的根节点分开了左右子树

示意图.png

从上面可以看出,3是2根节点,9是左子树,剩下的蓝色框就是右子树了
那么我们递归来进行这个过程就好了

找到根节点在中序遍历里面的index,那么就可以得出,左子树的遍历过程

root.left = 递归(preoder[1, index+1], inorder[0, index])
root.right = 递归(preoder[index+1], inorder[index+1])
var buildTree = function (preorder, inorder) {
    // 递归出口
    if (preorder.length === 0 || inorder.length === 0) return null

    let node = preorder[0]
    let indexRoot = inorder.indexOf(node)

    let root = new TreeNode(node)
    root.left = buildTree(preorder.slice(1, indexRoot + 1), inorder.slice(0, indexRoot))
    root.right = buildTree(preorder.slice(indexRoot + 1), inorder.slice(indexRoot + 1))
    return root
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容