首页 > 后端开发 > Golang > 正文

golang实现前序遍历

王林
发布: 2023-05-10 12:04:07
原创
477 人浏览过

前序遍历是二叉树遍历的一种,遍历顺序是,先遍历根节点,然后遍历左子树,最后遍历右子树。在golang中,可以使用递归算法来实现前序遍历。

首先,我们需要定义二叉树节点的结构体,包含节点的值、左子树和右子树指针。

type Node struct {
        Value int
        Left  *Node
        Right *Node
}
登录后复制

接下来,我们可以定义递归函数PreOrder来进行前序遍历。

func PreOrder(root *Node) []int {
        if root == nil {
                return []int{}
        }
        result := make([]int, 0)
        result = append(result, root.Value)
        result = append(result, PreOrder(root.Left)...)
        result = append(result, PreOrder(root.Right)...)
        return result
}
登录后复制

在函数中,我们首先判断根节点是否为空,如果为空,则返回一个空切片。

否则,我们先将根节点的值加入到result中,然后递归调用左子树和右子树,并将它们合并到result中。

最后,返回result即为前序遍历结果。

下面是一个完整的示例代码。

package main

import "fmt"

type Node struct {
        Value int
        Left  *Node
        Right *Node
}

func PreOrder(root *Node) []int {
        if root == nil {
                return []int{}
        }
        result := make([]int, 0)
        result = append(result, root.Value)
        result = append(result, PreOrder(root.Left)...)
        result = append(result, PreOrder(root.Right)...)
        return result
}

func main() {
        root := &Node{
                Value: 1,
                Left: &Node{
                        Value: 2,
                        Left: &Node{
                                Value: 4,
                        },
                        Right: &Node{
                                Value: 5,
                        },
                },
                Right: &Node{
                        Value: 3,
                        Left: &Node{
                                Value: 6,
                        },
                        Right: &Node{
                                Value: 7,
                        },
                },
        }
        result := PreOrder(root)
        fmt.Println(result)
}
登录后复制

输出结果为:[1 2 4 5 3 6 7],即二叉树的前序遍历结果。

通过递归算法,golang实现二叉树前序遍历非常简单,只需要几行代码即可完成。

以上是golang实现前序遍历的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!