Sobes.tech
Junior — Middle
107

Бинарлы ағашта элементті іздеу механизмі мен оның айналымы қалай жүзеге асатынын түсіндіріңіз.

Сұралған компаниялар
kode.ru

AI-дан жауап

sobes.tech AI

Бинарлы іздеу ағашында (BST) элементті іздеу келесідей жүзеге асырылады:

  1. Ағаштың түбірінен бастаймыз.
  2. Ізделетін мәнді ағымдағы түйінмен салыстырамыз:
    • Егер мән тең болса, элемент табылды.
    • Егер мән кіші болса, сол жақ бұтаққа өтеміз.
    • Егер мән үлкен болса, оң жақ бұтаққа өтеміз.
  3. Процесті қайталаймыз, элемент табылмайынша немесе бос түйінге жеткенше (элемент жоқ).

Бинарлы ағашты обход — барлық түйіндерді ретімен аралау тәсілі. Негізгі түрлері:

  • In-order (симметриялық): сол жақ бұтақ → түйін → оң жақ бұтақ. Бұл сұрыпталған тәртіпте элементтерді алуға мүмкіндік береді.
  • Pre-order (тікелей): түйін → сол жақ бұтақ → оң жақ бұтақ.
  • Post-order (кері): сол жақ бұтақ → оң жақ бұтақ → түйін.

Go тілінде іздеу және обход мысалы:

package main
import "fmt"

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

func (n *Node) Search(val int) *Node {
    if n == nil || n.Value == val {
        return n
    }
    if val < n.Value {
        return n.Left.Search(val)
    }
    return n.Right.Search(val)
}

func (n *Node) InOrder() {
    if n == nil {
        return
    }
    n.Left.InOrder()
    fmt.Print(n.Value, " ")
    n.Right.InOrder()
}

func main() {
    root := &Node{Value: 10}
    root.Left = &Node{Value: 5}
    root.Right = &Node{Value: 15}

    node := root.Search(5)
    if node != nil {
        fmt.Println("Табылған түйіннің мәні:", node.Value)
    } else {
        fmt.Println("Элемент табылмады")
    }

    fmt.Print("In-order обход: ")
    root.InOrder() // Нәтиже: 5 10 15
}