中缀表达式和后缀表达式

1.如何转变,人的思考由计算机模仿
2.树中儿子-兄弟表示法(2叉树)
3.二叉树的遍历 (递归法和栈循环)

下面是2个循环的中序遍历

一:
中序遍历非递归遍历算法
 遇到一个结点,就把它压栈,并去遍历它的左子树;
 当左子树遍历结束后,从栈顶弹出这个结点并访问它;
 然后按其右指针再去中序遍历该结点的右子树。

void InOrderTraversal( BinTree BT )
{  
    BinTree T=BT;
    Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/ 
    while( T || !IsEmpty(S) ){
        while(T){ /*一直向左并将沿途结点压入堆栈*/ 
            Push(S,T);
            T = T->Left;
         }
        if(!IsEmpty(S)){
            T = Pop(S); /*结点弹出堆栈*/
            printf(“%5d”, T->Data); /*(访问)打印结点*/
            T = T->Right; /*转向右子树*/
        } 
    }
}

二:

void InOrderTraversal( BinTree BT )
{  
   
   BinTree T=BT;
   
   Stack S = CreatStack( MaxSize ); /*创建并初始化堆栈S*/ 

   while(T || !IsEmpty(S)) 
   {
        if(T && T.left) 
        {
            // 如果有左节点就保存
            Push(S,T)
            T =  T.left;
        }
        else 
            
        {
            if(T == nil) 
            {
                 T = Pop(S); /*结点弹出堆栈*/
            }

                // 打印自己,并遍历右节点
            printf(“%5d”, T->Data); /*(访问)打印结点*/
            if(T.right) 
            {
                T =  T.right;
            } 
            else 
            {
                T = nil;
            }
        }   
   }

}

区别:

  1. 第一种是整体的思想,循环的点在print,打出一个点;第二种和递归类似,重点在单个节点的处理
    2.第一种叶节点也入栈,第二种叶节点没有入栈(栈数量层级少1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,942评论 1 31
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,615评论 0 12
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 11,712评论 5 14
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 6,919评论 0 3
  • 天高云淡的时候 妈妈会握着风筝 爸爸牵着线遍草地跑 山坡上还盛开着灿烂的狗尾巴草 远处码头吹来了风笛 我仔细素描着...
    活在你看不见的转角阅读 1,202评论 0 0