非遞歸實現(xiàn)二叉樹主要利用queue和stack的特點,對于層次遍歷二叉樹主要運用queue隊頭出,隊尾插入,先進先出的特點,先將根插入隊尾,然后輸出隊頭的元素,同時將隊頭的左子樹和右子樹元素插入隊尾,依次輸出輸出隊頭的元素,同時將隊頭的左子樹和右子樹元素插入隊尾,直到隊列為空。
目前創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、東莞網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
void levelorder()
{
queue
if (_root == NULL)
return;
s.push(_root);
while (!s.empty())
{
BinaryTreeNode
cout << front->_data << " ";
if (front->_left)
s.push(front->_left);
if (front->_right)
s.push(front->_right);
s.pop();
}
}
非遞歸實現(xiàn)二叉樹前序遍歷主要運用stack的先進后出的特點,先把根壓入棧里,同時先把左子樹的左子樹元素以此壓入棧底,最后左子樹的最后一個元素壓入棧底之后,再將棧底元素彈出棧,再判斷棧底最后一個元素的右子樹,利用以上的方法。代碼如下:
void prevorder()
{
stack
if (_root == NULL)
return;
s.push(_root);
while (!s.empty())
{
BinaryTreeNode
cout << cur->_data << " ";
s.pop();
if (cur->_right)
s.push(cur->_right);
if (cur->_left)
s.push(cur->_left);
}
}
非遞歸實現(xiàn)二叉樹中序遍歷主要運用stack的先進后出的特點,先把根壓入棧里,同時先把左子樹的左子樹元素以此壓入棧底,最后左子樹的最后一個元素壓入棧底之后,判斷棧底最后一個元素的右子樹,利用以上的方法。代碼如下:
void inorder()
{
stack
if (_root == NULL)
return;
BinaryTreeNode
while (cur||!s.empty())
{
while (cur)
{
s.push(cur);
cur = cur->_left;
}
cout << s.top()->_data << " ";
cur = s.top()->_right;
s.pop();
}
}
非遞歸實現(xiàn)二叉樹后序遍歷主要運用stack的先進后出的特點,在利用前序和后序的共同特點
void postorder()
{
stack
if (_root == NULL)
return;
BinaryTreeNode
BinaryTreeNode
s.push(cur);
while (cur || !s.empty())
{
while (cur->_left&&cur->_left!=prev)
{
s.push(cur->_left);
cur = cur->_left;
}
if (s.top()->_right&&s.top()->_right != prev)
{
cur = s.top()->_right;
s.push(cur);
}
else
{
cout << s.top()->_data << " ";
prev = s.top();
s.pop();
cur = s.top();
cur->_left =NULL;
}
}
}