[C++11]二叉树前序、中序和后序遍历2(非递归)

来源:互联网 发布:设计软件 logo cdr 编辑:程序博客网 时间:2024/06/05 04:11

(1)前序 非递归

//非递归前序遍历    void NRPreOrderTraverse(function<void(type& record)> visit)    {        if(_root!=nullptr)        {            stack<shared_ptr<treeNode<type>>> Stack;            Stack.push(_root);            shared_ptr<treeNode<type>> ptr;            while(!Stack.empty())            {                ptr=Stack.top();                visit(ptr->Record());                Stack.pop();                if(ptr->RightChild!=nullptr)                    Stack.push(ptr->RightChild);                if(ptr->LeftChild!=nullptr)                    Stack.push(ptr->LeftChild);            }        }    }

(2)中序 非递归

//非递归中序遍历    void NRInOrderTraverse(function<void(type& record)> visit)    {        if(_root!=nullptr)        {            stack<shared_ptr<treeNode<type>>> Stack;            auto ptr=_root;            do{                while(ptr!=nullptr)                {                    Stack.push(ptr);                    ptr=ptr->LeftChild;                }                ptr=Stack.top();                Stack.pop();                visit(ptr->Record());                ptr=ptr->RightChild;            }while(!Stack.empty()||ptr!=nullptr);        }    }

(3)后序  非递归

 //非递归后序遍历    void NRPostOrderTraverse(function<void(type& record)> visit)    {        if(_root!=nullptr)        {            shared_ptr<treeNode<type>> ptr;            stack<shared_ptr<treeNode<type>>> Stack,sOutput;            Stack.push(_root);            while(!Stack.empty())            {                ptr=Stack.top();                Stack.pop();                sOutput.push(ptr);                if(ptr->LeftChild!=nullptr)                {                    Stack.push(ptr->LeftChild);                }                if(ptr->RightChild!=nullptr)                {                    Stack.push(ptr->RightChild);                }            }            while(!sOutput.empty())            {                ptr=sOutput.top();                visit(ptr->Record());                sOutput.pop();            }        }    }



2 0
原创粉丝点击