zoukankan      html  css  js  c++  java
  • 二叉树的六种遍历方式

    一、递归实现前序、中序以及后序遍历

    1 void printTree(node *T)
    2 {
    3     if(T)
    4     {
    5         printTree(T->left);
    6         cout<<T->val;//调整输出节点T的顺序,可分别实现前序,后序
    7         printTree(T->right);
    8     }
    9 }

    二、循环实现前序、中序以及后序遍历

    思路参见文章:

    http://blog.csdn.net/ns_code/article/details/12977901

    (1)前序

     1 void Pre_treverse(node *T)
     2 {
     3     stack<node *> STA;
     4     node *p=T;
     5     while(p || !STA.empty())
     6     {
     7         cout<<p->val;
     8         STA.push(p);
     9         p=p->left;
    10         while(p==NULL && !STA.empty())
    11         {
    12             p=STA.top();
    13             p=p->right;
    14             STA.pop();
    15         }
    16     }
    17 }

    (2)中序

     1 void in_traverse(node *T)
     2 {
     3     stack<node *> STA;
     4     node *p=T;
     5     while(p || !STA.empty())
     6     {
     7         if(p->left)
     8         {
     9             STA.push(p);
    10             p=p->left;
    11         }
    12         else
    13         {
    14             cout<<p->val<<endl;
    15             p=p->right;
    16             while(!p && !STA.empty())
    17             {
    18                 p=STA.top();
    19                 cout<<p->val<<endl;
    20                 STA.pop();
    21                 p=p->right;
    22             }
    23         }
    24     }
    25 }

    (3)后序

     1 void beh_traverse(node *T)
     2 {
     3     stack<node *>STA;
     4     node *p;
     5     node *pre=NULL;
     6     STA.push(T);
     7     while(!STA.empty())
     8     {
     9         p=STA.top();
    10         if((p->left==NULL && p->right==NULL) || ((pre==NULL)&&(pre==p->left || pre==p->right)))
    11         {
    12             cout<<p->val<<endl;
    13             STA.pop();
    14             pre=p;
    15         }
    16         else
    17         {
    18             if(p->right)
    19                 STA.push(p->right);
    20             if(p->left)
    21                 STA.push(p->left);
    22         }
    23     }
    24 }
  • 相关阅读:
    l1-013
    将博客搬至CSDN
    Educational Codeforces Round 25
    大组合数取余模板【Lucas定理】
    Exams(二分求左界+贪心)
    Cutting (暴力 + 滚动哈希判字符串匹配)
    Cubes(DFS+剪枝)
    Codeforces Round #409 (Div. 2)
    【复习挖坑】dp + 图
    n & n-1 和 n & -n
  • 原文地址:https://www.cnblogs.com/riden/p/4639036.html
Copyright © 2011-2022 走看看