溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

非遞歸實現(xiàn)遍歷二叉樹

發(fā)布時間:2020-07-23 05:22:17 來源:網(wǎng)絡(luò) 閱讀:318 作者:走走停停吧 欄目:編程語言

非遞歸實現(xiàn)二叉樹主要利用queue和stack的特點,對于層次遍歷二叉樹主要運用queue隊頭出,隊尾插入,先進先出的特點,先將根插入隊尾,然后輸出隊頭的元素,同時將隊頭的左子樹和右子樹元素插入隊尾,依次輸出輸出隊頭的元素,同時將隊頭的左子樹和右子樹元素插入隊尾,直到隊列為空。

void levelorder()

{

queue<BinaryTreeNode<T> *>s;

if (_root == NULL)

return;

s.push(_root);

while (!s.empty())

{

                  BinaryTreeNode<T> *front=s.front();

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<BinaryTreeNode<T> *>s;

if (_root == NULL)

return;

s.push(_root);

while (!s.empty())

{

BinaryTreeNode<T> *cur = s.top();

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<BinaryTreeNode<T> *>s;

if (_root == NULL)

return;

BinaryTreeNode<T> *cur = _root;

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<BinaryTreeNode<T> *>s;

if (_root == NULL)

return;

BinaryTreeNode<T> *cur = _root;

BinaryTreeNode<T> *prev = NULL;

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;

}

}

}


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI