闽公网安备 35020302035485号

3.没有重复的节点。
type AddressBookNode struct {
Name string
ContactInfo string
Left *AddressBookNode
Right *AddressBookNode
}
插入联系人func (n *AddressBookNode) InsertContact(name, contactInfo string) *AddressBookNode {
if n == nil {
return &AddressBookNode{Name: name, ContactInfo: contactInfo, Left: nil, Right: nil}
}
if name < n.Name {
n.Left = n.Left.InsertContact(name, contactInfo)
} else if name > n.Name {
n.Right = n.Right.InsertContact(name, contactInfo)
}
return n
}
该方法的工作原理如下:3.返回修改后的节点。请注意,尽管在递归调用期间可能会修改树的结构,但根节点保持不变,并且返回修改后的树。
func (n *AddressBookNode) SearchContact(name string) (string, bool) {
if n == nil {
return "", false
}
if name == n.Name {
return n.ContactInfo, true
}
if name < n.Name {
return n.Left.SearchContact(name)
}
return n.Right.SearchContact(name)
}
该方法的工作原理如下:4.如果目标姓名与当前节点的姓名相等,则表示找到了要搜索的联系人节点。方法返回该节点的联系信息和true。
func (n *AddressBookNode) DeleteContact(name string) *AddressBookNode {
if n == nil {
return nil
}
if name < n.Name {
n.Left = n.Left.DeleteContact(name)
} else if name > n.Name {
n.Right = n.Right.DeleteContact(name)
} else {
if n.Left == nil && n.Right == nil {
return nil
} else if n.Left == nil {
return n.Right
} else if n.Right == nil {
return n.Left
}
minNode := n.Right.FindMin()
n.Name = minNode.Name
n.ContactInfo = minNode.ContactInfo
n.Right = n.Right.DeleteContact(minNode.Name)
}
return n
}
该方法的工作原理如下:4.3如果目标节点有两个子节点,则找到右子树中的最小节点,将其值复制到目标节点,并递归删除最小节点。