public int GetHeight(AryTreeNode <T> root)
        {
            //Height of root node is 0
            //Height of 1st level is 1

            if (root == null)
            {
                return(0);
            }

            //if there is a leaf node then return 0
            if (root.Children.Count == 0)
            {
                return(0);
            }

            int maxheight = 0;

            foreach (AryTreeNode <T> child in root.Children)
            {
                maxheight = Math.Max(maxheight, GetHeight(child));
            }

            return(maxheight + 1);
        }
        //Depth First Search with end of child marker
        //custom problem for serilaization of n-ary tree
        public string DepthFirstSearch(AryTreeNode <T> root)
        {
            StringBuilder sb = new StringBuilder();

            if (root == null)
            {
                return(string.Empty);
            }

            //root is not null..visit the current
            sb.Append(root.Data);

            ////check for leaf node  //End of child marker
            //if (root.Children.Count == 0)
            //{
            //    sb.Append('(');
            //    return sb.ToString();
            //}

            //It is not leaf node..then go depth first search
            foreach (AryTreeNode <T> child in root.Children)
            {
                sb.Append(DepthFirstSearch(child));
            }

            //End of child marker
            sb.Append('(');

            return(sb.ToString());
        }
        public string BreathFirstTraversal(AryTreeNode <T> root)
        {
            if (root == null)
            {
                return(string.Empty);
            }

            StringBuilder sb = new StringBuilder();

            Queue <AryTreeNode <T> > myqueue = new Queue <AryTreeNode <T> >();

            myqueue.Enqueue(root);
            sb.Append(root.Data).Append(",");

            while (myqueue.Count != 0)
            {
                AryTreeNode <T> current = myqueue.Dequeue();

                foreach (AryTreeNode <T> child in current.Children)
                {
                    //visit child
                    sb.Append(child.Data).Append(",");
                    myqueue.Enqueue(child);
                }
            }

            return(sb.ToString());
        }
        public static AryTree <char> SetAryTreewithMaxFourchildrens()
        {
            AryTree <char> tree = new AryTree <char>();

            AryTreeNode <char> node1 = new AryTreeNode <char>('A');
            AryTreeNode <char> node2 = new AryTreeNode <char>('B');
            AryTreeNode <char> node3 = new AryTreeNode <char>('C');
            AryTreeNode <char> node4 = new AryTreeNode <char>('D');
            AryTreeNode <char> node5 = new AryTreeNode <char>('E');
            AryTreeNode <char> node6 = new AryTreeNode <char>('F');
            AryTreeNode <char> node7 = new AryTreeNode <char>('G');
            AryTreeNode <char> node8 = new AryTreeNode <char>('H');
            AryTreeNode <char> node9 = new AryTreeNode <char>('I');

            AryTreeNode <char> node10 = new AryTreeNode <char>('J');
            AryTreeNode <char> node11 = new AryTreeNode <char>('K');


            //Lets buid a n-ary tree
            ///////////////////A
            ///////B///////////C//////////////////D
            ///E//////F//////////////////////G///H////I///J
            /////////K/////////////////////////////////////
            tree.root = node1;
            node1.Children.Add(node2);
            node1.Children.Add(node3);
            node1.Children.Add(node4);

            node2.Children.Add(node5);
            node2.Children.Add(node6);

            node4.Children.Add(node7);
            node4.Children.Add(node8);
            node4.Children.Add(node9);
            node4.Children.Add(node10);

            node6.Children.Add(node11);

            return(tree);
        }
Exemple #5
0
        private AryTree <char> DeserializeTreeFromArray(char[] array, int count)
        {
            if (array.Length == 0)
            {
                return(null);
            }

            AryTree <char> tree = new AryTree <char>();

            int index = 0;
            //Add first element to root
            Stack <AryTreeNode <char> > mystack = new Stack <AryTreeNode <char> >();
            AryTreeNode <char>          root    = new AryTreeNode <char>(array[index]);

            tree.root = root;

            mystack.Push(root);
            index++;

            AryTreeNode <char> parent = null;

            while (mystack.Count != 0 && index < count)
            {
                if (array[index] == '(')
                {
                    mystack.Pop();
                }
                else
                {
                    parent = mystack.Peek();
                    AryTreeNode <char> child = new AryTreeNode <char>(array[index]);
                    parent.Children.Add(child);
                    mystack.Push(child);
                }
                index++;
            }

            return(tree);
        }