码迷,mamicode.com
首页 > 编程语言 > 详细

二叉树遍历算法的非递归实现

时间:2020-07-11 19:21:14      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:color   后序   its   ==   node   empty   oid   post   int   

  • 前序遍历的非递归实现

 

  • 中序遍历的非递归实现
 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 }

 

二叉树遍历算法的非递归实现

标签:color   后序   its   ==   node   empty   oid   post   int   

原文地址:https://www.cnblogs.com/ruruozhenhao/p/13284822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!