Breadth First vs Depth first searches

Ok… I came up with a way… inspired in part by what you posted :slight_smile:

this was the input (1st is Parent, 2nd is Child, 3rd it “Text”)

self.add( "" ,"A","A")
        self.add( "A","B","B")
        self.add( "A","G","G")
        self.add( "A","J","J")
        self.add( "B","C","C")
        self.add( "B","D","D")
        self.add( "D","E","E")
        self.add( "D","F","F")
        self.add( "G","H","H")
        self.add( "G","I","I")
updateDataStore()
 private func updateDataStore() {
        dataSTORE.removeAll()
        if treeNODES.count>0 {
            for i in(0...treeNODES.count-1) { treeNODES[i].level = -1 }
            addBranch("",0)
        }
    }
    private func addBranch(_ parent:String,_ lvl:Int) {
        var didAdd : Int = 0
        if treeNODES.count>0 {
            for i in(0...treeNODES.count-1) {
                if treeNODES[i].level<0 {
                    var newLevel : Int = -1
                    if treeNODES[i].parent == parent  { newLevel=lvl }
                    if treeNODES[i].child  == parent { newLevel=lvl+1 }
                    if newLevel>=0 {
                        treeNODES[i].level=newLevel
                        dataSTORE.append(treeNODES[i])
                        didAdd += 1
                        addBranch(treeNODES[i].child,newLevel+1)
                    }
                }
            }
            if didAdd>0 { addBranch("",0) }
        }
        theTABLE.reloadData()
    }
}

results were
tree