// 14. hét – Bináris fa tömbös ábrázolással (1-től indexelve: gyerekek 2i és 2i+1, szülő i/2)
// Futtatás: go run ./h14/arraytree
package main

import "fmt"

// A 0. elemet nem használjuk; 0 = üres hely
var A = []rune{0, 'A', 'B', 'C', 'D', 'E', 0, 'G'}

func exists(i int) bool { return i < len(A) && A[i] != 0 }

func preorder(i int) {
	if !exists(i) {
		return
	}
	fmt.Printf("%c ", A[i])
	preorder(2 * i)
	preorder(2*i + 1)
}

func inorder(i int) {
	if !exists(i) {
		return
	}
	inorder(2 * i)
	fmt.Printf("%c ", A[i])
	inorder(2*i + 1)
}

func show(i int) string {
	if !exists(i) {
		return "-"
	}
	return string(A[i])
}

func main() {
	fmt.Print("preorder: ")
	preorder(1)
	fmt.Print("\ninorder:  ")
	inorder(1)
	fmt.Println()
	for i := 1; i < len(A); i++ {
		if A[i] == 0 {
			continue
		}
		parent := "-"
		if i > 1 {
			parent = string(A[i/2])
		}
		fmt.Printf("  A[%d] = %c, szülő: %s, bal: %s, jobb: %s\n", i, A[i], parent, show(2*i), show(2*i+1))
	}
}
