Junior — Middle
როგორ შეიძლება განახორციელოთ სხვადასხვა მონაცემთა ხეების გადავლა?
sobes.tech AI
პასუხი AI-სგან
მონაცემთა ხეების შემოვლას ჩვეულებრივ ახორციელებენ შემდეგი მეთოდებით:
-
გაფართოება სიღრმის მიხედვით (DFS)
- Pre-order (მარყუჟი → მარცხენა → მარჯვენა)
- In-order (მარცხენა → მარყუჟი → მარჯვენა)
- Post-order (მარცხენა → მარჯვენა → მარყუჟი)
-
გაფართოება სიგანეზე (BFS)
- ნაპოვნი კვანძების ვიზიტი დონეებით, დაწყებული მარყუჟიდან
Go ენაზე ეს შეიძლება განხორციელდეს რეკურსიული ან სტეკ/კითხვარის გამოყენებით. მაგალითად, სიღრმის მიხედვით შემოვლას (in-order) ბინარული ხისათვის:
func inOrder(node *Node) {
if node == nil {
return
}
inOrder(node.Left)
fmt.Println(node.Value)
inOrder(node.Right)
}
გაფართოებაზე სიგანეზე ჩვეულებრივ გამოიყენება რიგი:
func bfs(root *Node) {
if root == nil {
return
}
queue := []*Node{root}
for len(queue) > 0 {
current := queue[0]
queue = queue[1:]
fmt.Println(current.Value)
if current.Left != nil {
queue = append(queue, current.Left)
}
if current.Right != nil {
queue = append(queue, current.Right)
}
}
}