首頁 > 後端開發 > Golang > golang實作前序遍歷

golang實作前序遍歷

王林
發布: 2023-05-10 12:04:07
原創
528 人瀏覽過

前序遍歷是二元樹遍歷的一種,遍歷順序是,先遍歷根節點,然後遍歷左子樹,最後遍歷右子樹。在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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板