|  | 
|  | 
| back to board | always get Runtime error (access violation) C# On my machine all work fine, I'll delete code after I get AC. I think I allow wrong input, stackoverflow, more then 3000 number.
 
 Here code
 private static void Main(string[] args)
 {
 StringBuilder builder = new StringBuilder();
 int count; //= int.Parse(Console.ReadLine().Trim(' ', '\t', '\n','\r'));
 //if (count == 0)
 //    return;
 List<int> val = new List<int>();
 string text = "";
 #if !Test
 while((text = Console.ReadLine()) != "")
 {
 builder.Append(text.Trim());
 //val.AddRange(text.Split(new[] { ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList());
 }
 #else
 Random rand = new Random();
 builder.AppendLine(3000.ToString());
 for (int i = 0; i < 3000; i++)
 builder.AppendLine(rand.Next(0, 65535).ToString());
 #endif
 val = builder.ToString().Split(new[] { ' ', '\n', '\t', '\r' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
 if (val.Count <= 0 || val[0] <= 0)
 return;
 count = val[0];
 BinnaryTreeNode tree = new BinnaryTreeNode();
 //if (val.Count == 1)
 //{
 //    tree.value = val[0];
 //    for (int i = 0; i < count - 1; i++)
 //    {
 //        tree = CreateTree(int.Parse(Console.ReadLine()), tree);
 //    }
 //}
 //else
 {
 tree.value = val[0];
 for (int i = 1; i < val.Count && i < 3001; i++)
 tree = CreateTree(val[i], tree);
 }
 
 RightToLeft(tree);
 }
 static Stack<BinnaryTreeNode> stackNodes = new Stack<BinnaryTreeNode>();
 static Stack<int> values = new Stack<int>();
 static void RightToLeft(BinnaryTreeNode node)
 {
 // stackNodes.Push(node);
 // while(stackNodes.Count > 0)
 // {
 //     var nn = stackNodes.Pop();
 //     if (nn.Right != null)
 //         stackNodes.Push(nn.Right);
 //     if (nn.Left != null)
 //         stackNodes.Push(nn.Left);
 
 //     values.Push(nn.value);
 // }
 
 //for (int i = 0; i < values.Count; i++)
 // {
 //     Console.WriteLine(values.Pop());
 // }
 if (node == null)
 return;
 if (node.Right != null)
 RightToLeft(node.Right);
 if (node.Left != null)
 RightToLeft(node.Left);
 Console.WriteLine(node.value);
 }
 
 static  BinnaryTreeNode CreateTree(int value, BinnaryTreeNode node)
 {
 if (value > node.value)
 {
 var parentNode = new BinnaryTreeNode() { value = value };
 parentNode.Left = node;
 node.Parent = parentNode;
 return parentNode;
 }
 BinnaryTreeNode tempNOde = node;
 while(tempNOde.Left != null)
 {
 if (tempNOde.Left.value < value)
 {
 var parentNode = new BinnaryTreeNode() { value = value };
 parentNode.Right = node;
 parentNode.Left = tempNOde.Left;
 tempNOde.Left = null;
 parentNode.Left.Parent = parentNode;
 parentNode.Right.Parent = parentNode;
 return parentNode;
 }
 tempNOde = tempNOde.Left;
 }
 return node;
 
 }
 
 class BinnaryTreeNode
 {
 public int value;
 public BinnaryTreeNode Left;
 public BinnaryTreeNode Right;
 public BinnaryTreeNode Parent;
 
 public override string ToString()
 {
 return value.ToString();
 }
 }
Re: always get Runtime error (access violation) C# I suppose your program fails because of a recursion limit | 
 | 
|