go 간단 한 이 진 트 리 구현
최근 에 데이터 구 조 를 주 워 서 go 로 간단 한 이 진 트 리 를 썼 습 니 다.
package data
import (
"fmt"
"reflect"
)
type Binary struct {
Data interface{}
left *Binary
right *Binary
}
// ——
var i = -1
func (node *Binary) Create(data []interface{})*Binary {
if node == nil {
return nil
}
i = i +1
//
var bin *Binary
if i >= len(data) {
return nil
}else {
bin = new(Binary)
bin.Data = data[i]
bin.left = bin.Create(data)
bin.right = bin.Create(data)
}
return bin
}
func (node *Binary)New(index int,data []interface{})*Binary{
if node == nil {
return nil
}
bin := &Binary{data[index],nil,nil}
// *2+1 +2
if index< len(data) && 2*index+1 < len(data){
fmt.Println()
bin.left = bin.New(index*2+1,data)
}
if i< len(data) && 2*index+2 < len(data){
bin.right = bin.New(index*2+2,data)
}
return bin
}
// —— : DLR
func (node *Binary) PrevSort() {
//
if node == nil {
return
}
// D,
fmt.Print(node.Data, " ")
// ,
node.left.PrevSort()
// ,
node.right.PrevSort()
}
// —— : LDR
func (node *Binary) MidSort() {
if node == nil {
return
}
// ,
node.left.MidSort()
// ,
fmt.Print(node.Data, " ")
// ,
node.right.MidSort()
}
// —— : LRD --- 73415620
func (node *Binary) PostSort() {
if node == nil {
return
}
// ,
node.left.PostSort()
// ,
node.right.PostSort()
// ,
fmt.Print(node.Data, " ")
}
// ( )
func (node *Binary) Height() int {
//
if node == nil {
return 0
}
//
lh := node.left.Height()
//
rh := node.right.Height()
// ,
if lh > rh {
lh++
return lh
} else {
rh++
return rh
}
}
// ---
var num = 0 //
func (node *Binary) LeafNum() {
//
if node == nil {
return
}
// 。 == == nil
if node.left == nil && node.right == nil {
num++
}
//
node.left.LeafNum()
node.right.LeafNum()
}
// ---
func (node *Binary) LeafNum2(n *int) {
//
if node == nil {
return
}
if node.left == nil && node.right == nil {
(*n)++
}
//
node.left.LeafNum2(n)
node.right.LeafNum2(n)
}
//
func (node *Binary) Search(Data interface{}) {
if node == nil {
return
}
// 、
if reflect.DeepEqual(node.Data, Data) {
fmt.Println(" !")
return
}
//
node.left.Search(Data)
node.right.Search(Data)
}
//
func (node *Binary) Destroy() {
if node == nil {
return
}
// ,
node.left.Destroy()
node.left = nil
// ,
node.right.Destroy()
node.right = nil
node = nil
}
//
func (node *Binary) Reverse() {
if node == nil {
return
}
// Go , 、
node.left, node.right = node.right, node.left
//
node.left.Reverse()
node.right.Reverse()
}
//
func (node *Binary) Copy() *Binary {
if node == nil {
return nil
}
// 。
lChild := node.left.Copy()
// 。
rChild := node.right.Copy()
//
newNode := new(Binary)
newNode.Data = node.Data
newNode.left = lChild
newNode.right = rChild
return newNode
}
func NewBinary(){
node := new(Binary)
node = node.New(0,[]interface{}{1,2,3,4,5,6,7,8,9})
node.PrevSort()
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.