剑指 Offer 07. 重建二叉树

https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3
   / \
  9  20
    /  \
   15   7
func buildTree(pre []int, in []int) *TreeNode {
    if len(pre) == 0 || len(in) == 0 {
        return nil
    }
    var rootValue int = pre[0]
    var root *TreeNode = &TreeNode{rootValue, nil, nil}
    var index = findRootIndex(rootValue, in)
    root.Left = buildTree(pre[1:index + 1], in[0:index])
    root.Right = buildTree(pre[index + 1:], in[index + 1:])
    return root
}

func findRootIndex(target int, array []int) int{
    for i := 0; i < len(array); i++ {
        if array[i] == target {
            return i
        }
    }
    return -1
}

附录1:二叉树的遍历
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容