十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
非递归遍历二叉树利用栈的先进先出特点完成实现
前序比较好理解先压根入栈,在while里面访问根,根出栈,再压入右子树,左子树,这样的遍历二叉树就是前序遍历了。
void PrevOrdr_NonR()
{
stack
s.push(_root);
while(!s.empty())
{
BinaryTreeNode
s.pop();
cout<
if(top->_right)
s.push(top->_right);
if(top->_left)
s.push(top->_left);
}
cout<
}
中序的遍历顺序是左子树、根节点、右子树。
void InOreder_NonR()
{
stack
BinaryTreeNode
while(cur || !s.empty())
{
while(cur)//把左路径的节点全部压入栈
{
s.push(cur);
cur = cur->_left;
}
if(!s.empty())
{
BinaryTreeNode
s.pop();
cout<
cur = cur->_right;//把cur指向最后一个左节点的右节点
}
}
cout<
}
后序遍历是左子树、右子树、根节点。
void PostOrder_NonR()
{
stack
BinaryTreeNode
BinaryTreeNode
while(cur || s.empty())
{
while(cur)//左路径的节点入栈
{
s.push(cur);
cur = cur->_left;
}
BinaryTreeNode
if(top->_right == NULL || top->right == preVisited)
//当子树遍历之后回退到上一个没有遍历的子树
{
cout<
preVisited = tmp;
s.pop();
}
else
{
cur = cur->left;//把cur指向右子树继续寻找左节点
}
}
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。