user3194721
user3194721

Reputation: 815

Binary searchTree traversal display nodes up to N level

I want to display nodes up to 3 level. Here I'm writing code using Level order(BFS). Each node having 2 childrens. I'm not sure how to increase level after displaying that level data and want to display up to 3 level.

public Void LevelOrder()    
{      
 Queue q = new Queue();
int level=1;
 q.Enqueue(root);
 while (!q.empty() && level<=3)
 {
   level++;
    Node n = q.DeQueue();
    Console.Writeln(n.Value); 
    if (n.left !=null)
    {
        q.EnQueue(n.left);
    }
    if (n.right !=null)
    {
       q.EnQueue(n.right);
    }
 }
}

Upvotes: 0

Views: 48

Answers (1)

Suhan
Suhan

Reputation: 1434

private static void Main(string[] args)
        {
            var root = new Node
            {
                Val = 0,
                Left = new Node {Val = 1, Left = new Node {Val = 2, Left = new Node() {Val = 3}}},
                Right = new Node() {Val = 1, Right = new Node() {Val = 2, Right = new Node() {Val = 3,Left = new Node(){Val = 4}}}}
            };
            Printbylevel(root, 5);
            Console.ReadLine();
        }

        public static void Printbylevel(Node root, int depth)
        {
            Stack<Node> activenodes = new Stack<Node>();
            Stack<Node> nextnodes = new Stack<Node>();
            activenodes.Push(root);
            var level = 0;
            while (activenodes.Any())
            {
                level++;
                if (level == depth+1) return;
                Console.WriteLine("\n----{0}----", level);
                while (activenodes.Any())
                {
                    var current = activenodes.Pop();
                    if (current == null) continue;
                    Console.Write(current.Val);
                    nextnodes.Push(current.Left);
                    nextnodes.Push(current.Right);
                }
                while (nextnodes.Any())
                {
                    activenodes.Push(nextnodes.Pop());
                }
            }
        }
    }

    internal class Node
    {
        public int Val;
        public Node Right { get; set; }
        public Node Left { get; set; }
    }

Upvotes: 1

Related Questions