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 an important meeting. I like the algorithm, so I reviewed the algorithm and wrote 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;
using System.Threading.Tasks;
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);
}
}
}