Repository: gt4dev/yet-another-tree-structure
Branch: master
Commit: f877f7123f60
Files: 17
Total size: 16.1 KB
Directory structure:
gitextract_q36xmw2f/
├── README.md
├── csharp/
│ ├── CSharpTree/
│ │ ├── App.config
│ │ ├── CSharpTree.csproj
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── SampleData.cs
│ │ ├── SampleIterating.cs
│ │ ├── SampleSearching.cs
│ │ └── TreeNode.cs
│ └── CSharpTree.sln
└── java/
├── .classpath
├── .project
├── .settings/
│ └── org.eclipse.jdt.core.prefs
└── src/
└── com/
└── tree/
├── SampleData.java
├── SampleIterating.java
├── SampleSearching.java
├── TreeNode.java
└── TreeNodeIter.java
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# yet-another-tree-structure
================================================
FILE: csharp/CSharpTree/App.config
================================================
================================================
FILE: csharp/CSharpTree/CSharpTree.csproj
================================================
Debug
AnyCPU
{4F3E0879-E048-4D79-B2D0-F9D8A5218F8A}
Exe
Properties
CSharpTree
CSharpTree
v4.5
512
AnyCPU
true
full
false
bin\Debug\
DEBUG;TRACE
prompt
4
AnyCPU
pdbonly
true
bin\Release\
TRACE
prompt
4
================================================
FILE: csharp/CSharpTree/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CSharpTree")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CSharpTree")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("cb7b1cae-9306-4b82-b99d-16ff56d33f33")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
================================================
FILE: csharp/CSharpTree/SampleData.cs
================================================
namespace CSharpTree
{
class SampleData
{
public static TreeNode GetSet1()
{
TreeNode root = new TreeNode("root");
{
TreeNode node0 = root.AddChild("node0");
TreeNode node1 = root.AddChild("node1");
TreeNode node2 = root.AddChild("node2");
{
TreeNode node20 = node2.AddChild(null);
TreeNode node21 = node2.AddChild("node21");
{
TreeNode node210 = node21.AddChild("node210");
TreeNode node211 = node21.AddChild("node211");
}
}
TreeNode node3 = root.AddChild("node3");
{
TreeNode node30 = node3.AddChild("node30");
}
}
return root;
}
}
}
================================================
FILE: csharp/CSharpTree/SampleIterating.cs
================================================
using System;
using System.Text;
namespace CSharpTree
{
class SampleIterating
{
static void MainTest(string[] args)
{
TreeNode treeRoot = SampleData.GetSet1();
foreach (TreeNode node in treeRoot)
{
string indent = CreateIndent(node.Level);
Console.WriteLine(indent + (node.Data ?? "null"));
}
}
private static String CreateIndent(int depth)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < depth; i++)
{
sb.Append(' ');
}
return sb.ToString();
}
}
}
================================================
FILE: csharp/CSharpTree/SampleSearching.cs
================================================
using System;
namespace CSharpTree
{
class SampleSearching
{
static void Main(string[] args)
{
TreeNode treeRoot = SampleData.GetSet1();
TreeNode found = treeRoot.FindTreeNode(node => node.Data != null && node.Data.Contains("210"));
Console.WriteLine("Found: " + found);
}
}
}
================================================
FILE: csharp/CSharpTree/TreeNode.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace CSharpTree
{
public class TreeNode : IEnumerable>
{
public T Data { get; set; }
public TreeNode Parent { get; set; }
public ICollection> Children { get; set; }
public Boolean IsRoot
{
get { return Parent == null; }
}
public Boolean IsLeaf
{
get { return Children.Count == 0; }
}
public int Level
{
get
{
if (this.IsRoot)
return 0;
return Parent.Level + 1;
}
}
public TreeNode(T data)
{
this.Data = data;
this.Children = new LinkedList>();
this.ElementsIndex = new LinkedList>();
this.ElementsIndex.Add(this);
}
public TreeNode AddChild(T child)
{
TreeNode childNode = new TreeNode(child) { Parent = this };
this.Children.Add(childNode);
this.RegisterChildForSearch(childNode);
return childNode;
}
public override string ToString()
{
return Data != null ? Data.ToString() : "[data null]";
}
#region searching
private ICollection> ElementsIndex { get; set; }
private void RegisterChildForSearch(TreeNode node)
{
ElementsIndex.Add(node);
if (Parent != null)
Parent.RegisterChildForSearch(node);
}
public TreeNode FindTreeNode(Func, bool> predicate)
{
return this.ElementsIndex.FirstOrDefault(predicate);
}
#endregion
#region iterating
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator> GetEnumerator()
{
yield return this;
foreach (var directChild in this.Children)
{
foreach (var anyChild in directChild)
yield return anyChild;
}
}
#endregion
}
}
================================================
FILE: csharp/CSharpTree.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpTree", "CSharpTree\CSharpTree.csproj", "{4F3E0879-E048-4D79-B2D0-F9D8A5218F8A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4F3E0879-E048-4D79-B2D0-F9D8A5218F8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F3E0879-E048-4D79-B2D0-F9D8A5218F8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F3E0879-E048-4D79-B2D0-F9D8A5218F8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F3E0879-E048-4D79-B2D0-F9D8A5218F8A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
================================================
FILE: java/.classpath
================================================
================================================
FILE: java/.project
================================================
yet-another-tree-structure
org.eclipse.jdt.core.javabuilder
org.eclipse.jdt.core.javanature
================================================
FILE: java/.settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6
================================================
FILE: java/src/com/tree/SampleData.java
================================================
package com.tree;
class SampleData {
public static TreeNode getSet1() {
TreeNode root = new TreeNode("root");
{
TreeNode node0 = root.addChild("node0");
TreeNode node1 = root.addChild("node1");
TreeNode node2 = root.addChild("node2");
{
TreeNode node20 = node2.addChild(null);
TreeNode node21 = node2.addChild("node21");
{
TreeNode node210 = node21.addChild("node210");
TreeNode node211 = node21.addChild("node211");
}
}
TreeNode node3 = root.addChild("node3");
{
TreeNode node30 = node3.addChild("node30");
}
}
return root;
}
public static TreeNode getSetSOF() {
TreeNode root = new TreeNode("root");
{
TreeNode node0 = root.addChild("node0");
TreeNode node1 = root.addChild("node1");
TreeNode node2 = root.addChild("node2");
{
TreeNode node20 = node2.addChild(null);
TreeNode node21 = node2.addChild("node21");
{
TreeNode node210 = node20.addChild("node210");
}
}
}
return root;
}
}
================================================
FILE: java/src/com/tree/SampleIterating.java
================================================
package com.tree;
class SampleIterating {
public static void main(String[] args) {
TreeNode treeRoot = SampleData.getSet1();
for (TreeNode node : treeRoot) {
String indent = createIndent(node.getLevel());
System.out.println(indent + node.data);
}
}
private static String createIndent(int depth) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < depth; i++) {
sb.append(' ');
}
return sb.toString();
}
}
================================================
FILE: java/src/com/tree/SampleSearching.java
================================================
package com.tree;
class SampleSearching {
public static void main(String[] args) {
Comparable searchCriteria = new Comparable() {
@Override
public int compareTo(String treeData) {
if (treeData == null)
return 1;
boolean nodeOk = treeData.contains("210");
return nodeOk ? 0 : 1;
}
};
TreeNode treeRoot = SampleData.getSet1();
TreeNode found = treeRoot.findTreeNode(searchCriteria);
System.out.println("Found: " + found);
}
}
================================================
FILE: java/src/com/tree/TreeNode.java
================================================
package com.tree;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TreeNode implements Iterable> {
public T data;
public TreeNode parent;
public List> children;
public boolean isRoot() {
return parent == null;
}
public boolean isLeaf() {
return children.size() == 0;
}
private List> elementsIndex;
public TreeNode(T data) {
this.data = data;
this.children = new LinkedList>();
this.elementsIndex = new LinkedList>();
this.elementsIndex.add(this);
}
public TreeNode addChild(T child) {
TreeNode childNode = new TreeNode(child);
childNode.parent = this;
this.children.add(childNode);
this.registerChildForSearch(childNode);
return childNode;
}
public int getLevel() {
if (this.isRoot())
return 0;
else
return parent.getLevel() + 1;
}
private void registerChildForSearch(TreeNode node) {
elementsIndex.add(node);
if (parent != null)
parent.registerChildForSearch(node);
}
public TreeNode findTreeNode(Comparable cmp) {
for (TreeNode element : this.elementsIndex) {
T elData = element.data;
if (cmp.compareTo(elData) == 0)
return element;
}
return null;
}
@Override
public String toString() {
return data != null ? data.toString() : "[data null]";
}
@Override
public Iterator> iterator() {
TreeNodeIter iter = new TreeNodeIter(this);
return iter;
}
}
================================================
FILE: java/src/com/tree/TreeNodeIter.java
================================================
package com.tree;
import java.util.Iterator;
public class TreeNodeIter implements Iterator> {
enum ProcessStages {
ProcessParent, ProcessChildCurNode, ProcessChildSubNode
}
private TreeNode treeNode;
public TreeNodeIter(TreeNode treeNode) {
this.treeNode = treeNode;
this.doNext = ProcessStages.ProcessParent;
this.childrenCurNodeIter = treeNode.children.iterator();
}
private ProcessStages doNext;
private TreeNode next;
private Iterator> childrenCurNodeIter;
private Iterator> childrenSubNodeIter;
@Override
public boolean hasNext() {
if (this.doNext == ProcessStages.ProcessParent) {
this.next = this.treeNode;
this.doNext = ProcessStages.ProcessChildCurNode;
return true;
}
if (this.doNext == ProcessStages.ProcessChildCurNode) {
if (childrenCurNodeIter.hasNext()) {
TreeNode childDirect = childrenCurNodeIter.next();
childrenSubNodeIter = childDirect.iterator();
this.doNext = ProcessStages.ProcessChildSubNode;
return hasNext();
}
else {
this.doNext = null;
return false;
}
}
if (this.doNext == ProcessStages.ProcessChildSubNode) {
if (childrenSubNodeIter.hasNext()) {
this.next = childrenSubNodeIter.next();
return true;
}
else {
this.next = null;
this.doNext = ProcessStages.ProcessChildCurNode;
return hasNext();
}
}
return false;
}
@Override
public TreeNode next() {
return this.next;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}