github.com/aarzilli/tools@v0.0.0-20151123112009-0d27094f75e0/net/http/domclean2/horizontal_traversal_demo.go (about) 1 package domclean2 2 3 import ( 4 "fmt" 5 6 "github.com/pbberlin/tools/util" 7 "golang.org/x/net/html" 8 ) 9 10 // TraverseHori traverses the tree horizontally. 11 // It uses a queue. A FiFo structure. 12 // Inspired by www.geeksforgeeks.org/level-order-tree-traversal/ 13 func traverseHori(lp interface{}) { 14 15 var queue = util.NewQueue(10) 16 17 lvlPrev := 0 18 for lp != nil { 19 20 lpn := lp.(NdX).Nd 21 lvl := lp.(NdX).Lvl 22 23 // print current 24 if lvl != lvlPrev { // new level => newline 25 fmt.Printf("\n%2v:\t", lvl) 26 lvlPrev = lvl 27 } 28 fmt.Printf("%8s ", lpn.Data) 29 30 // enqueue all children 31 for c := lpn.FirstChild; c != nil; c = c.NextSibling { 32 if c.Type == html.ElementNode { 33 queue.EnQueue(NdX{c, lvl + 1}) 34 } 35 } 36 lp = queue.DeQueue() 37 } 38 }