迴圈遍歷二叉樹
前序遍歷
struct Node { Node*left; Node*right; int data; Node(){ func; } }; Node* create(Node*p, int depth) { if (p && depth) { p->left = new Node; p->right = new Node; p->data = depth; create(p->left, depth - 1); create(p->right, depth - 1); } if (!depth) { p->left = nullptr; p->right = nullptr; p->data = depth; } return p; } void print1(Node*p) { if (p) { cout << p->data << " "; print1(p->left); print1(p->right); } } void print2(Node*head)//利用stack 模擬函式呼叫過程 來遍歷{ stack<Node* > s; Node*p = head; { while (p) { s.push(p); cout << p->data << " "; p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right && pp != head) { cout << pp->right->data << " "; } s.pop(); } } { p = head->right; while (p) { s.push(p); cout << p->data << " "; p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right && pp != head) { cout << pp->right->data << " "; } s.pop(); } } } int main() { Node* head = new Node; create(head, 2); head->data = 10; head->left->data = 6; head->right->data = 14; head->left->left->data = 4; head->left->right->data = 8; head->right->left->data = 12; head->right->right->data = 16; print1(head);//遞迴遍歷 cout << endl; print2(head);//迴圈遍歷 system("pause"); return 0; }
中序
void print2(Node*head) { stack<Node* > s; Node*p = head; { while (p) { s.push(p); // cout << p->data << " "; p = p->left; } while (!s.empty()) { Node*pp = s.top(); cout << pp->data << " "; if (pp->right && pp != head ) { cout << pp->right->data << " "; } s.pop(); } } { p = head->right; while (p) { s.push(p); p = p->left; } while (!s.empty()) { Node*pp = s.top(); cout << pp->data << " "; if (pp->right&& pp != head) { cout << pp->right->data << " "; } s.pop(); } } }
後序
void print2(Node*head) { stack<Node* > s; Node*p = head; { while (p) { s.push(p); p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right && pp != head ) { cout << pp->right->data << " "; } if ( pp != head) cout << pp->data << " "; s.pop(); } } { p = head->right; while (p) { s.push(p); p = p->left; } while (!s.empty()) { Node*pp = s.top(); if (pp->right&& pp != head) { cout << pp->right->data << " "; } cout << pp->data << " "; s.pop(); } } cout << head->data << " "; }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2218782/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- Day14 | 二叉樹遞迴遍歷二叉樹遞迴
- Map迴圈遍歷
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- 【JavaScript實用技巧(一)】迴圈遍歷與跳出迴圈遍歷JavaScript
- 二叉樹的非遞迴遍歷寫法二叉樹遞迴
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 二叉樹建立後,如何使用遞迴和棧遍歷二叉樹?二叉樹遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 二叉樹遍歷方法二叉樹
- 二叉樹的遍歷二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 二叉樹的所有遍歷非遞迴實現二叉樹遞迴
- C++樹——遍歷二叉樹C++二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- Golang for迴圈遍歷小坑Golang
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 二叉樹四種遍歷二叉樹
- 完全二叉樹的遍歷二叉樹
- 6.14-二叉樹遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 二叉樹的遍歷筆記二叉樹筆記
- 二叉樹的遍歷實現二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的按層遍歷二叉樹
- 二叉樹遍歷方法總結二叉樹