Efficient binary tree routing algorithm

Package main 

Import (
"FMT"
"Math / bits"
)

FUNC main () {
RES: = pathInZigZagTree ( 100 )
fmt.Println (RES)
}

FUNC pathInZigZagTree (label int ) [] int {
// even rows descending numbers in each row 2 lines -1 power -2 line power -1 ,
@ odd rows ascending
@ 1000
RES: = the make ([] int , 0 )

H: = bits.Len ( uint ( label))

fori := h; i > 0; i-- {
res = append(res, label)
max := 1<<uint(i-1) - 1
// min := max + 1>>1
// 偶数行
m := label % (1 << uint(i-1)) / 2
if label%2 == 1 {
m = (label - 1) % (1 << uint(i-1)) / 2
}
label = max - m
}
arr := make([]int, h)
for i := 0; i < h/2; i++ {
arr[i] = res[h-i-1]
arr[h-i-1] = res[i]
}
if h%2 == 1 {
arr[h/2] = res[h/2]
}

return arr
}

Guess you like

Origin www.cnblogs.com/w3liu/p/11267333.html