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  }