Example #1
0
        //后序遍历:先左->右->跟  迭代实现
        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();
        }
Example #2
0
        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);
        }
Example #3
0
        //先序遍历:先跟->左->右  迭代实现
        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);
                }
            }
        }