Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.51 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Web;
  6.  
  7. namespace Blog.Utilities
  8. {
  9.     public class TreeNode<T>
  10.     {
  11.         private readonly T _value;
  12.         private readonly List<TreeNode<T>> _children = new List<TreeNode<T>>();
  13.  
  14.         public TreeNode(T value)
  15.         {
  16.             _value = value;
  17.         }
  18.  
  19.         public TreeNode<T> this[int i]
  20.         {
  21.             get { return _children[i]; }
  22.         }
  23.  
  24.         public TreeNode<T> Parent { get; private set; }
  25.  
  26.         public T Value { get { return _value; } }
  27.  
  28.         public ReadOnlyCollection<TreeNode<T>> Children
  29.         {
  30.             get { return _children.AsReadOnly(); }
  31.         }
  32.  
  33.         public TreeNode<T> AddChild(T value)
  34.         {
  35.             var node = new TreeNode<T>(value) { Parent = this };
  36.             _children.Add(node);
  37.             return node;
  38.         }
  39.  
  40.         public TreeNode<T>[] AddChildren(params T[] values)
  41.         {
  42.             return values.Select(AddChild).ToArray();
  43.         }
  44.  
  45.         public bool RemoveChild(TreeNode<T> node)
  46.         {
  47.             return _children.Remove(node);
  48.         }
  49.  
  50.         public void Traverse(Action<T> action)
  51.         {
  52.             action(Value);
  53.             foreach (var child in _children)
  54.                 child.Traverse(action);
  55.         }
  56.  
  57.         public IEnumerable<T> Flatten()
  58.         {
  59.             return new[] { Value }.Concat(_children.SelectMany(x => x.Flatten()));
  60.         }
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement