//后序遍历:先左->右->跟 迭代实现 public void TraversePost(BinNode <T> node) { if (null == node) { return; } Stack <BinNode <T> > result = new Stack <BinNode <T> >(); Stack <BinNode <T> > stack = new Stack <BinNode <T> >(); stack.Push(node); while (stack.Count > 0) { node = stack.Pop(); result.Push(node); if (node.HasLChild()) { stack.Push(node.LeftChild); } if (node.HasRChild()) { stack.Push(node.RightChild); } } while (result.Count > 0) { BinNode <T> temp = result.Pop(); Console.Write(temp.Element.ToString() + " "); } Console.WriteLine(); }
public List <BinNode <T> > TraverseLevel(BinNode <T> node) { List <BinNode <T> > list = new List <BinNode <T> >(); if (null == node) { return(list); } Queue <BinNode <T> > queue = new Queue <BinNode <T> >(); queue.Enqueue(node); while (queue.Count > 0) { node = queue.Dequeue(); Console.Write(node.Element.ToString() + " "); list.Add(node); if (node.HasLChild()) { queue.Enqueue(node.LeftChild); } if (node.HasRChild()) { queue.Enqueue(node.RightChild); } } return(list); }
//先序遍历:先跟->左->右 迭代实现 public void TraversePre(BinNode <T> node) { if (null == node) { return; } Stack <BinNode <T> > stack = new Stack <BinNode <T> >(); stack.Push(node); while (stack.Count > 0) { node = stack.Pop(); Console.Write(node.Element.ToString() + " "); if (node.HasRChild()) { stack.Push(node.RightChild); } if (node.HasLChild()) { stack.Push(node.LeftChild); } } }