using System.Collections.Generic; namespace NzbDrone.Common.Expansive { internal class TreeNode { private List _CallTree; private TreeNode _Parent; public TreeNode(T value) { Value = value; Parent = null; Children = new TreeNodeList(this); _CallTree = new List(); } public TreeNode(T value, TreeNode parent) { Value = value; Parent = parent; Children = new TreeNodeList(this); _CallTree = new List(); } public TreeNode Parent { get { return _Parent; } set { if (value == _Parent) { return; } if (_Parent != null) { _Parent.Children.Remove(this); } if (value != null && !value.Children.Contains(this)) { value.Children.Add(this); } _Parent = value; } } public TreeNode Root { get { //return (Parent == null) ? this : Parent.Root; TreeNode node = this; while (node.Parent != null) { node = node.Parent; } return node; } } public TreeNodeList Children { get; private set; } public List CallTree { get { _CallTree = new List(); TreeNode node = this; while (node.Parent != null) { node = node.Parent; _CallTree.Add(node.Value); } return _CallTree; } private set => _CallTree = value; } public T Value { get; set; } } }