Golang从字符串解析树的相关题解

本文介绍了如何使用Golang从特定格式的字符串构建一棵树,并进行遍历。文章中通过举例说明了输入样例"-1(3(2)(5))(4(6))"如何转化为树结构,并提供了相关的代码实现。读者可以在此基础上讨论和提出优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天笔试一道题,根据输入的字符串,解析成一棵树,并将其遍历。
输入样例:-1(3(2)(5))(4(6))

以下是代码(有什么地方需要改进的请提出,谢谢):

package main

import (
	"fmt"
	"strconv"
)

type tree struct {
	v *int
	l *tree
	r *tree
	f *tree
}

func (t *tree) LCR() []int {
	a := []int{}
	if t.l != nil {
		a = append(a,t.l.LCR()... )

	}
	a = append(a, *t.v)
	if t.r != nil {
		a = append(a,t.r.LCR()...)
	}
	return a
}

func main() {

	a := "-1(3(2)(5))(4(6))"
	l, r := 0, 0
	top := &tree{}
	tmp := top
	for i := 0; i < len(a); i++ {
		if string(a[i]) == ("(") {
			r = i
			if string(a[i-1]) != (")") {
				n, _ := strconv.Atoi(a[l:r])
				tmp.v = &n
			}
			l = r + 1
			if tmp.l == nil {
				tmp.l = &tree{f: tmp}
				tmp = tmp.l
			} else {
				tmp.r = &tree{f: tmp}
				tmp = tmp.r
			}
		} else if string(a[i]) == (")") {
			r = i
			if string(a[i-1]) != (")") {
				n, _ := strconv.Atoi(a[l:r])
				tmp.v = &n
			}
			tmp = tmp.f
		}
	}
	b := top.LCR()
	fmt.Println(b)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值