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); }
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); }