二叉树遍历算法的非递归实现
Posted ruruozhenhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树遍历算法的非递归实现相关的知识,希望对你有一定的参考价值。
- 前序遍历的非递归实现
- 中序遍历的非递归实现
1 void InOrder2(BTNode *root) { 2 BTNode *p = root; 3 stack<BTNode *> S; 4 while (p != NULL || !S.empty()) { 5 if (p) { // 找到树中最左边的那个结点,并将路径中经过的结点依次压入栈中 6 S.push(p); 7 p = p->left; 8 } else { // 如果该节点为空则输出其双亲结点 9 S.pop(); 10 p = S.top(); 11 cout << p->val << " "; 12 p = p->right; // 访问双亲结点的右孩子 13 } 14 } 15 }
- 后序遍历的非递归实现
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxsize = 1005; 6 7 typedef struct BTNode { 8 int val; 9 BTNode *left; 10 BTNode *right; 11 }; 12 13 typedef struct { 14 BTNode *p; 15 int revisited; 16 } SNode; 17 18 void PostOrder2(BTNode *root) { 19 SNode sn; 20 BTNode *pt = root; 21 stack<SNode> S; 22 while (pt) { 23 S.push({pt, 0}); 24 pt = pt->left; 25 } 26 while (!S.empty()) { 27 sn = S.top(); 28 if (sn.p->right == NULL || sn.revisited == 1) { 29 S.pop(); 30 cout << pt->val << " "; 31 } else { 32 sn.revisited = 1; 33 pt = sn.p->right; 34 while (pt != NULL) { 35 S.push({pt, 0}); 36 pt = pt->left; 37 } 38 } 39 } 40 }
以上是关于二叉树遍历算法的非递归实现的主要内容,如果未能解决你的问题,请参考以下文章
每日一题如何进行二叉树的各种遍历的非递归算法实现?简要讲述。