C#实现二叉树的前序、中序、后序遍历。

publicclassBinaryTreeNode{intvalue;BinaryTreeNodeleft;BinaryTreeNoderight;///<summary>///前序遍历///</summary>///<paramname="tree"></param>publicstaticvoidPreOrder(BinaryTreeNodetree){if(tree==null)return;System.Console.Write(tree.value+"");PreOrder(tree.left);PreOrder(tree.right);}///<summary>///前序遍历循环实现///</summary>///<paramname="tree"></param>publicstaticvoidPreOrderLoop(BinaryTreeNodetree){if(tree==null)return;Stack<BinaryTreeNode>stack=newStack<BinaryTreeNode>();BinaryTreeNodenode=tree;while(node!=null||stack.Any()){if(node!=null){stack.Push(node);System.Console.Write(node.value+"");node=node.left;}else{varitem=stack.Pop();node=item.right;}}}///<summary>///中序遍历///</summary>///<paramname="tree"></param>publicstaticvoidInOrder(BinaryTreeNodetree){if(tree==null)return;InOrder(tree.left);System.Console.Write(tree.value+"");InOrder(tree.right);}///<summary>///中序遍历循环实现///</summary>///<paramname="tree"></param>publicstaticvoidInOrderLoop(BinaryTreeNodetree){if(tree==null)return;Stack<BinaryTreeNode>stack=newStack<BinaryTreeNode>();BinaryTreeNodenode=tree;while(node!=null||stack.Any()){if(node!=null){stack.Push(node);node=node.left;}else{varitem=stack.Pop();System.Console.Write(item.value+"");node=item.right;}}}///<summary>///后序遍历///</summary>///<paramname="tree"></param>publicstaticvoidPostOrder(BinaryTreeNodetree){if(tree==null)return;PostOrder(tree.left);PostOrder(tree.right);System.Console.Write(tree.value+"");}///<summary>///后序遍历循环实现1///</summary>///<paramname="tree"></param>publicstaticvoidPostOrderLoop(BinaryTreeNodetree){if(tree==null)return;Stack<BinaryTreeNode>stack=newStack<BinaryTreeNode>();BinaryTreeNodenode=tree;BinaryTreeNodepre=null;stack.Push(node);while(stack.Any()){node=stack.Peek();if((node.left==null&&node.right==null)||(pre!=null&&(pre==node.left||pre==node.right))){System.Console.Write(node.value+"");pre=node;stack.Pop();}else{if(node.right!=null)stack.Push(node.right);if(node.left!=null)stack.Push(node.left);}}}///<summary>///后续遍历循环实现2///</summary>///<paramname="tree"></param>publicstaticvoidPostOrderLoop2(BinaryTreeNodetree){HashSet<BinaryTreeNode>visited=newHashSet<BinaryTreeNode>();Stack<BinaryTreeNode>stack=newStack<BinaryTreeNode>();BinaryTreeNodenode=tree;while(node!=null||stack.Any()){if(node!=null){stack.Push(node);node=node.left;}else{varitem=stack.Peek();if(item.right!=null&&!visited.Contains(item.right)){node=item.right;}else{System.Console.Write(item.value+"");visited.Add(item);stack.Pop();}}}}}