|
using System;
using System.Collections.Generic;
using System.Text;
namespace MathParserDataStructures
{
public class MathParserBinaryTree
{
private MathParserTreeNode _root;
#region Constructors
public MathParserBinaryTree()
{
_root = new MathParserTreeNode(Nonterminal.NoValue);
}
/// <summary>
/// Create binary tree object with specified root.
/// </summary>
/// <param name="root"></param>
public MathParserBinaryTree(MathParserTreeNode root)
{
_root = root;
}
#endregion
#region Properties
/// <summary>
/// Root of the binary tree.
/// </summary>
public MathParserTreeNode Root
{
get
{
return _root;
}
}
/// <summary>
/// Gets the number of nodes in current Binary tree
/// </summary>
public int NumberOfNodes
{
get
{
CountVisitor countVisitor = new CountVisitor();
this.Visit(countVisitor);
return countVisitor.Count;
}
}
#endregion
/// <summary>
/// Visit all nodes in the binary tree. Left-Right-Root movement is performed.
/// </summary>
/// <param name="visitor">Visitor</param>
public virtual void Visit(IVisitor visitor)
{
Visit(visitor, _root);
}
/// <summary>
/// Visit all nodes in the binary tree.
/// </summary>
/// <param name="visitor">Visitor</param>
/// <param name="curNode">Current node</param>
protected virtual void Visit(IVisitor visitor, MathParserTreeNode curNode)
{
if (curNode != null)
{
if (curNode.Left != null)
Visit(visitor, curNode.Left);
if (curNode.Right != null)
Visit(visitor, curNode.Right);
visitor.Action(curNode);
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Florian lives in Munich, Germany. He started his programming career with Perl. After programming C/C++ for some years he discovered his favorite programming language C#. He did work at Siemens as a programmer until he decided to study Physics.
During his studies he worked as an IT consultant for various companies. After graduating with a PhD in theoretical particle Physics he is working as a senior technical consultant in the field of home automation and IoT.
Florian has been giving lectures in C#, HTML5 with CSS3 and JavaScript, software design, and other topics. He is regularly giving talks at user groups, conferences, and companies. He is actively contributing to open-source projects. Florian is the maintainer of AngleSharp, a completely managed browser engine.