【二叉树算法】golang--构造二叉树

本文介绍如何利用golang从数组构建二叉树,包括通过前序和中序遍历,以及中序和后序遍历数组来构造二叉树。核心算法逻辑是确定根节点并递归分割左右子树。
摘要由CSDN通过智能技术生成

构造二叉树

  • 算法逻辑
    1. 从前序或后序数组中,找到根节点Val值,对应为第一个元素或最后一个元素
    2. 以根节点为切割点,分割中序数组、前/后序数组,注意先分割中序
    3. 递归方式,得到最终结果
  • 疑问:为什么要递归
    当将数组分为左子树Val和右子树Val值后,后面的步骤和之前是完全一致的。
    均为找到根节点,分割左右子树
    所以采用递归方式

通过前序遍历和中序遍历数组构造二叉树

// 通过前序遍历和中序遍历构造二叉树
func buildBinaryTreeII(preorder, inorder []int) *TreeNode {
	//
	if len(preorder) < 1 {
		return nil
	}
	nodeVal := preorder[0]
	if len(preorder) == 1 {
		return &TreeNode{Val: nodeVal}
	}
	root := &TreeNode{Val: nodeVal}
	//
	var index int

	for i := 0; i < len(inorder); i++{
		if inorder[i] == nodeVal {
			index = i
		}
	}
	//
	preLeft, preRight := preorder[1:index+1], preorder[index+1:]
	inLeft, inRight := inorder[:index], inorder[index+1:]
	//
	root.Left = buildBinaryTreeII(preLeft,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值