treeenumerator.cs

来自「微软(Microsoft)出版社C井练习文件及解答」· CS 代码 · 共 89 行

CS
89
字号
using System;
using System.Collections.Generic;
using System.Text;

namespace BinaryTree
{
    class TreeEnumerator<T> : IEnumerator<T> where T : IComparable<T>
    {
        public TreeEnumerator(Tree<T> data)
        {
            this.currentData = data;
        }

        private void populate(Queue<T> enumQueue, Tree<T> tree)
        {
            if (tree.LeftTree != null)
            {
                populate(enumQueue, tree.LeftTree);
            }

            enumQueue.Enqueue(tree.NodeData);
            
            if (tree.RightTree != null)
            {
                populate(enumQueue, tree.RightTree);
            }
        }

        private Tree<T> currentData = null;
        private T currentItem = default(T);
        private Queue<T> enumData = null;

        #region IEnumerator<T> Members

        T IEnumerator<T>.Current
        {
            get 
            {
                if (this.enumData == null)
                    throw new InvalidOperationException("Use MoveNext before calling Current");

                return this.currentItem;
            }
        }

        #endregion

        #region IDisposable Members

        void IDisposable.Dispose()
        {
            //throw new Exception("The method or operation is not implemented.");
        }

        #endregion

        #region IEnumerator Members

        object System.Collections.IEnumerator.Current
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        bool System.Collections.IEnumerator.MoveNext()
        {
            if (this.enumData == null)
            {
                this.enumData = new Queue<T>();
                populate(this.enumData, this.currentData);
            }

            if (this.enumData.Count > 0)
            {
                this.currentItem = this.enumData.Dequeue();
                return true;
            }

            return false;
        }

        void System.Collections.IEnumerator.Reset()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?