Skip to content

二叉树构建的go语言代码有问题 #2910

Open
@lizzy-0323

Description

@lizzy-0323

源代码:

func constructBinaryTree(array []int) *TreeNode {
    var root *TreeNode
    nodes := make([]*TreeNode, len(array))

    // 初始化二叉树节点
    for i := 0; i < len(nodes); i++ {
	var node *TreeNode
	if array[i] != -1 {
	    node = &TreeNode{Val: array[i]}
	}
	nodes[i] = node
	if i == 0 {
	    root = node
	}
    }
    // 串联节点
    for i := 0; i*2+2 < len(array); i++ {
        if nodes[i] != nil {
	    nodes[i].Left = nodes[i*2+1]
	    nodes[i].Right = nodes[i*2+2]
	}
    }
    return root
}

这里最后串联节点的部分感觉不对,这样的话会漏掉节点,感觉可以写成

	for i := 0; i < len(arr); i++ {
		if i*2+1 < len(arr) {
			nodes[i].Left = nodes[i*2+1]
		}
		if i*2+2 < len(arr) {
			nodes[i].Right = nodes[i*2+2]
		}
	}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions