由先序遍历序列和中序遍历序列,建立二叉树的二叉链表

该博客介绍了如何根据先序和中序遍历序列来构建二叉树的二叉链表。提供的代码示例分别用Go语言实现了两种不同的构建方法,一种基于递归,另一种为非递归。这两种方法都利用了先序遍历的第一个元素作为根节点,并通过中序遍历找到根节点的位置来划分左右子树。
摘要由CSDN通过智能技术生成

由先序遍历序列和中序遍历序列,建立二叉树的二叉链表(二叉树各节点值各不相同)

/**
 * 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
    }
    node := &TreeNode{Val: preorder[0]} // 下标从 0 开始
    var pos int
    for pos = 0; inorder[pos] != node.Val; pos++ {}
    node.Left = buildTree(preorder[1:pos+1], inorder[:pos])
    node.Right = buildTree(preorder[pos+1:], inorder[pos+1:])
    return node
}
func PreInCreate(pre, infix []int) (tree *biTree) {
	tree = &biTree{data: pre[1]} // 下标从 1 开始
	var i int
	for i = 1; infix[i] != tree.data; i++ {
	}
	llen := i - 1
	rlen := len(infix) - i - 1 // 想想这里为什么减 1
	if llen == 0 {
		tree.lchild = nil
	} else {
		tree.lchild = PreInCreate(pre[1:2+llen], infix[0:i])
	}
	if rlen == 0 {
		tree.rchild = nil
	} else {
		tree.rchild = PreInCreate(pre[len(pre)-rlen-1:], infix[i:])
	}
	return
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值