LeetCode热题100道-Day08

66 阅读1分钟

LeetCode热题100道-Day08

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

  • 经典根据前序和中序求推出二叉树
func buildTree(preorder []int, inorder []int) *TreeNode {
	n := len(preorder) - 1
	return tra(preorder, inorder, 0, n, 0, n)
}
func tra(preorder, inorder []int, PL, PR, IL, IR int) *TreeNode {
	if PL > PR {
		return nil
	}
	gen := preorder[PL]

	temp := 0
	for i := IL; i <= IR; i++ {
		if inorder[i] != gen {
			temp++
		} else {
			break
		}
	}
	resTemp := &TreeNode{}
	resTemp.Val = gen
	l := tra(preorder, inorder, PL+1, PL+temp, IL, IL+temp)
	r := tra(preorder, inorder, PL+temp+1, PR, IL+temp+1, IR)
	resTemp.Left = l
	resTemp.Right = r
	return resTemp
}

96. 不同的二叉搜索树

  • 动态规划
func numTrees(n int) int {
    dp := make([]int, n+1)
    dp[0] = 1
    dp[1] = 1
    for i:=2; i<=n; i++ {
        for j:=1; j<=i; j++ {
            if 
            dp[i] += dp[j-1]*dp[i-j]
        }
    }
    return dp[n]
}