zoukankan      html  css  js  c++  java
  • 二叉树遍历的算法

    1、递归算法:

     1 void preOrder(BTNode *b)  //先序遍历递归算法
     2 {
     3     if (b!=NULL)
     4     {
     5         visit(b);
     6         preOrder(b->lchild);
     7         preOrder(b->rchild);
     8     }
     9 }
    10 void InOrder(BTNode *b)   //中序遍历递归算法
    11 {
    12     if(b!=NULL)
    13     {
    14         InOrder(b->lchild);
    15         visit(b);
    16         InOrder(b->rchild);
    17     }
    18 }
    19 void PostOrder(BTNode *b)   //后序遍历递归算法
    20 {
    21     if(b!=NULL){
    22         PostOrder(b->lchild);
    23         PostOrder(b->rchild);
    24         visit(b);
    25     }
    26 }

    2、非递归

     1 void PreOrder(BTNode *b)//先序遍历
     2 {
     3     Stack s;
     4     while(b!=NULL||!s.empty())
     5     {
     6         if(b!=NULL){
     7             visit(b);
     8             s.push(b);
     9             b=b->left;
    10         }
    11         else{
    12             b=s.pop();
    13             b=b->right;
    14         }
    15     }
    16 }
    17 
    18 //中序遍历
    19 void InOrder(BTNode *b){
    20     Stack s;
    21     while(b!=NULL||!s.empty()){
    22         if (b!=NULL)
    23         {
    24             s.push(b);
    25             s=s->left
    26         }
    27         if(!s.empty()){
    28             b=s.pop();
    29             visit(b);
    30             b=b->right;
    31         }
    32     }
    33 }
    34 
    35 //后序遍历
    36 void PostOrder(BTNode *b){
    37     Stack s;
    38     while(b!=NULL){
    39         s.push(b);
    40     }
    41     while(!s.empty()){
    42         BTNode* node=s.pop();
    43         if(node->bPushed){
    44             visit(node);
    45         }
    46         else{
    47             s.push(node);
    48             if(node->right!=NULL){
    49                 node->right->bPushed=false;
    50                 s.push(node->right);
    51             }
    52             if(node->left!=NULL){
    53                 node->left->bpushed=false;
    54                 s.push(node->left);
    55             }
    56         node->bPushed=true;  //如果标识位为true,则表示入栈
    57         }        
    58     }
    59 }
    
    
  • 相关阅读:
    第八章 线性时间排序
    第七章 快速排序
    第六章 堆排序
    第四章 分治策略
    第二章 算法基础
    第一章 算法在计算中的作用
    opencv —— cornerSubPix 亚像素级角点检测
    opencv —— Shi-Tomasi 角点检测
    .NET List<T>Conat vs AddRange
    自定义组装json对象
  • 原文地址:https://www.cnblogs.com/olivegyr/p/7081295.html
Copyright © 2011-2022 走看看