二叉树基本知识点2:
二叉树的非递归后序遍历
前序遍历是:根、左、右,后序遍历是:左、右、根,观察发现:前序和后序刚好遍历顺序相反。由于非递归后序遍历需要保存根节点及第几次访问,比较麻烦。可以将整个过程变为先非递归前序遍历,将结果保存,再将结果翻转即可。
 已知二叉树的前序、中序序列,求后序序列
 void suffix_order(char* pre_order, char* in_order, int len){
      if(NULL == pre_order || NULL == in_order){
              return;
      }
      char root = pre_order[0];
      if(len == 1){
              suffix[level++] = root;
              if(level == pre_order_len){
                       int i;
                       for(i=0; i<level; i++){
                                printf("%c ",suffix[i]);
                       }
                       return ;
              } 
              return;
      }
      suffix[level++] = root;
      int j=0;
      char * in = in_order;
      while(*in != '\0' && root != *in){
              j++;
              if(j >= len){
                   break;
              }
              in++;
      }   
      
      int left_len = in - in_order;
      int right_len = len - left_len - 1;
      if(right_len > 0){
                   suffix_order(pre_order+1+left_len,in_order+1+left_len,right_len);
      }
      if(left_len > 0){
                   suffix_order(pre_order+1,in_order,left_len);
      }
 }