Use select to retrieve all nodes in a Binary tree : Query « LINQ « C# / C Sharp






Use select to retrieve all nodes in a Binary tree

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class Tree<TreeNode> : IEnumerable<TreeNode> where TreeNode : IComparable<TreeNode> {
    public Tree(TreeNode nodeValue) {
        this.NodeData = nodeValue;
        this.LeftTree = null;
        this.RightTree = null;
    }

    public void Insert(TreeNode newItem) {
        TreeNode currentNodeValue = this.NodeData;
        if (currentNodeValue.CompareTo(newItem) > 0) {
            if (this.LeftTree == null) {
                this.LeftTree = new Tree<TreeNode>(newItem);
            } else {
                this.LeftTree.Insert(newItem);
            }
        } else {
            if (this.RightTree == null) {
                this.RightTree = new Tree<TreeNode>(newItem);
            } else {
                this.RightTree.Insert(newItem);
            }
        }
    }

    public void WalkTree() {
        if (this.LeftTree != null) {
            this.LeftTree.WalkTree();
        }

        Console.WriteLine(this.NodeData.ToString());

        if (this.RightTree != null) {
            this.RightTree.WalkTree();
        }
    }

    public TreeNode NodeData { get; set; }
    public Tree<TreeNode> LeftTree { get; set; }
    public Tree<TreeNode> RightTree { get; set; }


    IEnumerator<TreeNode> IEnumerable<TreeNode>.GetEnumerator() {
        if (this.LeftTree != null) {
            foreach (TreeNode item in this.LeftTree) {
                yield return item;
            }
        }

        yield return this.NodeData;

        if (this.RightTree != null) {
            foreach (TreeNode item in this.RightTree) {
                yield return item;
            }
        }
    }
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
        throw new NotImplementedException();
    }
}

class Employee : IComparable<Employee> {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Department { get; set; }
    public int Id { get; set; }

    public override string ToString() {
        return String.Format("Id: {0}, Name: {1} {2}, Dept: {3}", this.Id, this.FirstName, this.LastName, this.Department);
    }
    int IComparable<Employee>.CompareTo(Employee other) {
        if (other == null)
            return 1;

        if (this.Id > other.Id)
            return 1;

        if (this.Id < other.Id)
            return -1;

        return 0;
    }
}

class Program {
    static void Main() {
        Tree<Employee> empTree = new Tree<Employee>(new Employee { Id = 1, FirstName = "Janet", LastName = "Gates", Department = "IT" });
        empTree.Insert(new Employee { Id = 2, FirstName = "O", LastName = "G", Department = "Marketing" });
        empTree.Insert(new Employee { Id = 4, FirstName = "K", LastName = "H", Department = "IT" });
        empTree.Insert(new Employee { Id = 6, FirstName = "L", LastName = "H", Department = "Sales" });
        empTree.Insert(new Employee { Id = 3, FirstName = "E", LastName = "L", Department = "Sales" });
        empTree.Insert(new Employee { Id = 5, FirstName = "D", LastName = "L", Department = "Marketing" });

        var allEmployees = from e in empTree.ToList<Employee>()
                           select e;

        foreach (var emp in allEmployees)
            Console.WriteLine(emp);

    }
}

 








Related examples in the same category

1.Chaining Query Operators/extracts all strings containing the letter "a", sorts them by length, and then converts the results to uppercase
2.Use Contains, Length and ToUpper from Linq
3.Get Distinct departments with condition
4.Use LINQ to get Employees in the IT department from a tree
5.Use from where select to choose the Employees in the IT department from a tree
6.All employees in a tree are grouped by department