美文网首页
105. 从前序与中序遍历序列构造二叉树

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

作者: one_zheng | 来源:发表于2018-10-23 12:14 被阅读36次

    根据一棵树的前序遍历与中序遍历构造二叉树。

    注意:
    你可以假设树中没有重复的元素。

    例如,给出

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

    image.png
    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    func buildTree(preorder []int, inorder []int) *TreeNode {
        if len(preorder) == 0 || len(inorder) == 0 {
            return nil
        }
        rootdata := preorder[0]
    
        root := &TreeNode{
            Val:   rootdata,
            Left:  nil,
            Right: nil,
        }
    
        rootindex := getIndex(inorder, rootdata)
    
        root.Left = buildTree(preorder[1:rootindex+1], inorder[0:rootindex])
        root.Right = buildTree(preorder[rootindex+1:], inorder[rootindex+1:])
    
        return root
    }
    
    func getIndex(array []int, val int) int {
        for i := 0; i <= len(array)-1; i++ {
            if array[i] == val {
                return i
            }
        }
        return -1
    }
    

    相关文章

      网友评论

          本文标题:105. 从前序与中序遍历序列构造二叉树

          本文链接:https://www.haomeiwen.com/subject/yonozftx.html