package main import ( "fmt" "piscine" ) func main() { root := &piscine.TreeNode{Data: "4"} BTreeInsertData(root, "1") BTreeInsertData(root, "7") BTreeInsertData(root, "5") node := BTreeSearchItem(root, "4") fmt.Println("Before delete:") BTreeApplyInorder(root, fmt.Println) root = piscine.BTreeDeleteNode(root, node) fmt.Println("After delete:") BTreeApplyInorder(root, fmt.Println) } func BTreeInsertData(root *piscine.TreeNode, data string) *piscine.TreeNode { if root == nil { return &piscine.TreeNode{Data: data} } if data < root.Data { root.Left = BTreeInsertData(root.Left, data) root.Left.Parent = root } else { root.Right = BTreeInsertData(root.Right, data) root.Right.Parent = root } return root } func BTreeSearchItem(root *piscine.TreeNode, elem string) *piscine.TreeNode { if root == nil { return nil } if elem > root.Data { return BTreeSearchItem(root.Right, elem) } else if elem < root.Data { return BTreeSearchItem(root.Left, elem) } else if elem == root.Data { return root } else { return root } } func BTreeApplyInorder(root *piscine.TreeNode, f func(...interface{}) (int, error)) { if root == nil { return } BTreeApplyInorder(root.Left, f) f(root.Data) BTreeApplyInorder(root.Right, f) }