golang深度获取子节点

起因

需要在树形结构里获取子树,树形结构一般是存储一维数组,数组元素里存储子节点的指针

代码

package main

import (
    "errors"
    "fmt"
)

type Node struct {
    Deep  int
    Child *Node
}

func (n *Node) GetChild() *Node {
    return n.Child
}

func (n *Node) SetChild(child *Node) {
    n.Child = child
}

func GetDeepChild(node *Node, level int) (*Node, error) {
    if level < 0 {
        return nil, errors.New("level must >= 0")
    }
    if level == 0 {
        return node, nil
    } else {
        child := node.GetChild()
        if child == nil {
            return nil, nil
        }
        return GetDeepChild(child, level-1)
    }

}

func main() {
    root := &Node{Deep: 0}
    child1 := &Node{Deep: 1}
    root.SetChild(child1)

    child2 := &Node{Deep: 2}
    child1.SetChild(child2)

    child3 := &Node{Deep: 3}
    child2.SetChild(child3)

    child4 := &Node{Deep: 4}
    child3.SetChild(child4)

    child, _ := GetDeepChild(root, 3)
    fmt.Printf("child %#v\n", child) // deep 3
    child, _ = GetDeepChild(root, 5)
    fmt.Printf("child %#v\n", child) // nil
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值