leetcode105-Golang根据前序遍历与中序遍历构建二叉树

Golang根据前序遍历与中序遍历构建二叉树

执行用时:4 ms, 在所有 Go 提交中击败了95.86%的用户
内存消耗:3.9 MB, 在所有 Go 提交中击败了81.48%的用户

解题思路

  • 前序遍历:根节点,左子树,右子树; 数组第一个元素必定是root节点
  • 中序遍历:左子树,根节点,右子树; 利用前序遍历中找到的root节点在中序遍历中找到其对应的索引index,该index即是左子树长度
  • 切割遍历数组: (左子树的前序遍历,左子树的中序遍历), (右子树的前序遍历,右子树的中序遍历)
  • 递归

代码

/**
 * 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{
		return nil
	}
	// 1. 创建根节点
	root := &TreeNode{Val: preorder[0]}
	// 2. 获取根节点在中序遍历数组中的index
	var i int
	for index,value := range inorder{
		if value == preorder[0]{
			i = index
            break
		}
	}
	// 3. 递归
	root.Left = buildTree(preorder[1:i+1],inorder[:i])
	root.Right = buildTree(preorder[i+1:],inorder[i+1:])
	return root
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值