亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

非遞歸實現遍歷二叉樹

發布時間:2020-07-23 05:22:17 來源:網絡 閱讀:326 作者:走走停停吧 欄目:編程語言

非遞歸實現二叉樹主要利用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();

}

}

非遞歸實現二叉樹前序遍歷主要運用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);

}

}

非遞歸實現二叉樹中序遍歷主要運用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();

}

}

非遞歸實現二叉樹后序遍歷主要運用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問一下細節

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

AI

太谷县| 永靖县| 原阳县| 定南县| 榆中县| 濮阳市| 安乡县| 介休市| 尼勒克县| 望谟县| 壶关县| 横山县| 江口县| 沽源县| 阳朔县| 霍林郭勒市| 札达县| 灌云县| 光山县| 宝坻区| 拜泉县| 宣威市| 陇南市| 石林| 天祝| 东源县| 亚东县| 车致| 玉树县| 中西区| 山丹县| 丹凤县| 安塞县| 印江| 苏尼特右旗| 汤原县| 长岭县| 唐海县| 尚义县| 崇阳县| 辽阳市|