private void AddToTree(ref BinaryTreeItem <T> node, T value) { // необходимо передавать узел по ссылке, так как иначе в метод передастя переменная, в которой находится ссылка (число) на узел //следовательно при присвоении этой ссылке новго узла старый узел не изменится, так и останется Null, следовательно нам надо поменть именно ту ссылку. if (node == null) { node = new BinaryTreeItem <T>() { Value = value }; return; } else { //значение в узле больше добавляемого элемента, значит он находится в левом поддереве, иначе в правом if (node.Value.CompareTo(value) == 1) { AddToTree(ref node.LeftChild, value); } else { AddToTree(ref node.RightChild, value); } } }
private IEnumerable <T> PostfixTraverse(BinaryTreeItem <T> node) { if (node == null) { yield break; } else { foreach (var el in PostfixTraverse(node.LeftChild)) { yield return(el); } foreach (var el in PostfixTraverse(node.RightChild)) { yield return(el); } yield return(node.Value); } }
private bool Find(BinaryTreeItem <T> node, T key) { if (node == null) { return(false); } else { if (node.Value.CompareTo(key) == 0) { return(true); } else if (node.Value.CompareTo(key) == 1) { return(Find(node.LeftChild, key)); } else { return(Find(node.RightChild, key)); } } }
public BinaryTree() { root = null; }