# Ternary tree preoder traversal (recursive implementation)

Problem statement:

Print out to console the ternary tree preorder traversal. Suppose that the tree can have at most 3 children, left, middle and right. Preorder traversal is to visit the middle child first, and then left, and then right. Every node has integer value.

My introduction of Algorithm

I was asked to write a simple recursive algorithm two years ago at the end of important meeting. I like the algorithm, so I reviewed the algorithm today and write a short C# solution today.

I am planning to study a few of short C# courses by myself on pluralsight.com called "defensive code in C#", "Code Contracts", "Provable Code", learn to write better C# code in next 2 weeks. I am learning C# right now.

I am trying to get some critics on my practice today.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TernaryTreePreorderTraversal
{
class TernaryTree
{
static void Main(string[] args)
{
RunTestcase();
}

/*
* Ternary tree:
*      1
*    / | \
*   3  2  5
*  /|  |
* 4 33 22
*/
public static void RunTestcase()
{
var root = new TernaryTree(1);

root.Middle = new TernaryTree(2);
root.Left   = new TernaryTree(3);
root.Right  = new TernaryTree(4);

root.Middle.Middle = new TernaryTree(22);
root.Left.Middle   = new TernaryTree(33);
root.Right = new TernaryTree(5);

TernaryTree.PreOrderTraversal(root);

// manually verify the console output is 1 2 22 3 33 4 5
}

public TernaryTree Left   { get; set; }
public TernaryTree Right  { get; set; }
public TernaryTree Middle { get; set; }
public int Data { get; set; }

public TernaryTree(int val)
{
Data = val;
}

public static void PreOrderTraversal(TernaryTree node)
{
if (node == null)
{
return;
}

Console.WriteLine(node.Data);

PreOrderTraversal(node.Middle);
PreOrderTraversal(node.Left);
PreOrderTraversal(node.Right);
}
}
}

• when will the root be visited? – Vogel612 Feb 25 '17 at 21:14
• @Vogel612, may I ask you to explain the question in more detail? I debugged the test case and it works as I showed in the C# comment. – Jianmin Chen Feb 25 '17 at 21:17
• Usually traversing orderings also include when the root of a subtree is visited. Your traversal orders only include the children. When is the root of a subtree visited? – Vogel612 Feb 25 '17 at 21:19
• @Vogel612, I guess that you like to ensure that the root node is visited first, and then children of ternary tree are visited. Here the statement of output: Console.WriteLine(node.Data); is the answer, visit the root means sending node's value to console. – Jianmin Chen Feb 25 '17 at 21:22