Solved

how do you create a tree with more than 2 nodes in VB.NET

Posted on 2011-09-19
6
244 Views
Last Modified: 2012-05-12
I need to create a tree that has 5 nodes per parent that goes down 10 levels deep.  I have seen a ton of examples for binary trees but nothing for greater than 2.  
0
Comment
Question by:monica73174
  • 3
  • 3
6 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 36564371
Just create a List within the Node that holds all the child Nodes:

    Public Class MyTreeNode
        Public SomeValue As String
        Public Children As New List(Of MyTreeNode)
    End Class

Now it can hold as many children as you like...
0
 

Author Comment

by:monica73174
ID: 36564451
I am having trouble figuring out how I move from each node at each level to set the children.

For example the first level has the root and that is the parent but then the next level has 5 nodes and I need to move to each node to set the children of those nodes.  how do I track the parent of each group of children?
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 36564500
Where is your data coming from?

>> "how do I track the parent of each group of children?"

You keep a reference to it...

Here is an example:  A --> B --> C

    Dim root As New MyTreeNode
    root.SomeValue = "A"

    Dim child1 As New MyTreeNode
    child1.SomeValue = "B"

    Dim child2 As New MyTreeNode
    child2.SomeValue = "C"

    root.Children.Add(child1)
    child1.Children.Add(child2)
0
Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

 

Author Comment

by:monica73174
ID: 36564517
Basically my tree will be the same five actions repeated over and over.

This is a small sample of what it should look like.

                          Initial state - root
action1 - action2 - action3 - action4 - action5  --

then these five nodes will be repeated under each of these nodes as children and so on up to 10 levels.  .
0
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 36564612
Here's a new MyTreeNode:
Public Class MyTreeNode

    Public Sub New(ByVal Value As String)
        SomeValue = Value
    End Sub

    Public SomeValue As String

    Public Children As New List(Of MyTreeNode)

    Public Shared Sub Print(ByVal root As MyTreeNode)
        Debug.Print(root.SomeValue)
        For Each child As MyTreeNode In root.Children
            MyTreeNode.Print(child, 1)
        Next
    End Sub

    Private Shared Sub Print(ByVal node As MyTreeNode, ByVal Level As Integer)
        Debug.Print(New String(Chr(9), Level) & node.SomeValue)
        For Each child As MyTreeNode In node.Children
            MyTreeNode.Print(child, Level + 1)
        Next
    End Sub

End Class

Open in new window


To be used in this example:
Public Class Form1

    Private Root As MyTreeNode

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Example:
        CreateTree(3, 5) ' 3 actions, 5 levels deep
    End Sub

    Public Sub CreateTree(ByVal NumActions As Integer, ByVal NumLevels As Integer)
        Root = New MyTreeNode("Root")
        CreateNodes(Root, NumActions, NumLevels, 1)
    End Sub

    Private Sub CreateNodes(ByVal parent As MyTreeNode, ByVal NumActions As Integer, ByVal NumLevels As Integer, ByVal CurLevel As Integer)
        For i As Integer = 1 To NumActions
            Dim mtn As New MyTreeNode("Action" & i)
            parent.Children.Add(mtn)
        Next
        If CurLevel < NumLevels Then
            For Each child As MyTreeNode In parent.Children
                CreateNodes(child, NumActions, NumLevels, CurLevel + 1)
            Next
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MyTreeNode.Print(Me.Root)
    End Sub

End Class

Open in new window



Which produced this Output:  
Root
	Action1
		Action1
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
		Action2
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
		Action3
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
	Action2
		Action1
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
		Action2
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
		Action3
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
	Action3
		Action1
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
		Action2
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
		Action3
			Action1
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action2
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3
			Action3
				Action1
					Action1
					Action2
					Action3
				Action2
					Action1
					Action2
					Action3
				Action3
					Action1
					Action2
					Action3

Open in new window

0
 

Author Comment

by:monica73174
ID: 36564661
Thank you it looks exactly like what I am trying to do.  
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

785 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question