1. 题目要求:编写非递归算法实现二叉树的中序遍历。

  2. 遍历代码:

    void InOrderTraverseNR(BiTree T)
    {SqStack stack;InitStack(&stack);Push(&stack,T);while(!StackEmpty(stack)){  BiTree p;while(GetTop(stack,&p)&&p)Push(&stack,p->lchild);Pop(&stack,&p);if(!StackEmpty(stack)){Pop(&stack,&p);printf("%c",p->data);Push(&stack,p->rchild);}}
    }
    
  3. 完整程序

    #include<stdio.h>
    #include<stdlib.h>
    #define MAXSIZE 100
    typedef struct BiTNode
    {char data;struct BiTNode *lchild,*rchild;
    }BiTNode,*BiTree;
    typedef struct
    {BiTree data[MAXSIZE];int top;
    }SqStack;
    void InitStack(SqStack *S)
    { S->top=-1;
    }
    int GetTop(SqStack S,BiTree *e)
    {if(S.top==-1)return 0;else*e=S.data[S.top]; return 1;
    }
    int Push(SqStack *S,BiTree e)
    {if(S->top==MAXSIZE-1)return 0;S->top++; S->data[S->top]=e;return 1;
    }
    void Pop(SqStack *S,BiTree *e)
    { if(S->top==-1)return;*e=S->data[S->top];S->top--;
    }
    int StackEmpty(SqStack S)
    { if (S.top==-1)return 1;elsereturn 0;
    }
    //前序递归建立一棵二叉树
    void CreateBiTree(BiTree *T)
    {char ch;scanf("%c",&ch);if(ch=='#') *T=NULL;else{*T=(BiTree)malloc(sizeof(BiTNode));if(!*T)return;(*T)->data=ch;   CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild);}
    }
    //二叉树的非递归中序遍历
    void InOrderTraverseNR(BiTree T)
    {SqStack stack;InitStack(&stack);Push(&stack,T);while(!StackEmpty(stack)){  BiTree p;while(GetTop(stack,&p)&&p)Push(&stack,p->lchild);Pop(&stack,&p);if(!StackEmpty(stack)){Pop(&stack,&p);printf("%c",p->data);Push(&stack,p->rchild);}}
    }
    int main()
    {BiTree T;printf("按照前序序列构造一棵二叉树:");CreateBiTree(&T);//ABD##E##CF##G##printf("中序非递归遍历结果:");InOrderTraverseNR(T); //DBEAFCG
    }
    

编写非递归算法实现二叉树的中序遍历相关推荐

  1. 利用非递归方法实现二叉树的中序遍历

    #include<iostream> #include<stack> #define N 7 using namespace std;typedef struct node { ...

  2. 二叉树的中序遍历 递归与非递归

    94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [ ...

  3. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)

    二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...

  4. 编写非递归算法实现二叉树的前序遍历

    题目要求:编写非递归算法实现二叉树的前序遍历. 遍历代码 void PreOrderTraverseNR(BiTree T) {SqStack stack;InitStack(&stack); ...

  5. lintcode:二叉树的中序遍历

    题目: 二叉树的中序遍历 给出一棵二叉树,返回其中序遍历 样例 给出二叉树 {1,#,2,3}, 1\2/3 返回 [1,3,2]. 挑战 你能使用非递归算法来实现么? 解题: 程序直接来源 Java ...

  6. 15 二叉树的中序遍历(Binary Tree Inorder Traversal)

    文章目录 1 题目 2 描述 3 解决方案 3.1 递归算法 3.1.1 遍历法(Traverse) 思路 源码 3.1.2 分治法(Devide And Conquer) 思路 源码 3.2 非递归 ...

  7. 94. 二叉树的中序遍历-M

    94. 二叉树的中序遍历 label: 非递归中序遍历,LNR,字节跳动面试题 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [1,3,2] 进阶 ...

  8. 《LeetCode力扣练习》第94题 二叉树的中序遍历 Java

    <LeetCode力扣练习>第94题 二叉树的中序遍历 Java 一.资源 题目: 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,nul ...

  9. LeetCode 92反转链表Ⅱ93复制ip地址94二叉树的中序遍历

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

最新文章

  1. Blender写实建筑场景制作学习教程 Exterior Visualization in Blender 2.9
  2. 【基础篇】DatePickerDialog日期控件的基本使用(一)
  3. 我国机器视觉企业体量偏小,上游零部件占利润大头
  4. 英国激进新冠试验曝光:招募健康志愿者,故意感染病毒,每人补偿3万5
  5. 打造完美的JS树形菜单
  6. 移动端 UI 适配最佳实践(中)
  7. Web程序员的Mysql进阶序一之sql使用分类及基础
  8. 数据结构之树的存储结构
  9. 找到MVC框架中前端URL与后端同步的解决方案
  10. 父元素浮动子元素会浮动吗_为什么quot;overflow:hiddenquot;能清除浮动的影响
  11. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEM...
  12. 动态提出的数据怎么换行 js_前端代码动态生成应用及改造
  13. WordPress主题Ripro子主题美化包wori-child 1.3+下载插件美化
  14. SQLyog数据库导出
  15. 恩格玛密码机的工作原理
  16. 修改网络设备在路由器中显示名称
  17. 京东手机评论文本挖掘与数据分析(Python)
  18. 各种蜂蜜功效大全(收藏)
  19. 编译祁大神的iguana,大神就是大神.
  20. 项管行知04--项目章程

热门文章

  1. 苹果7怎么开启位置服务器,iPhone7小白点如何开启?苹果iPhone7虚拟Home键开启设置方法图解...
  2. 【OpenGL学习笔记五】 索引缓冲对象EBO
  3. C语言%lld、%llu无法正常输出比long long长整数小的数
  4. 如何实现 Oracle 的自增序列,两步轻松搞定
  5. HttpWebRequest.Create
  6. v-distpicker的简单安装和使用 — 一款地区选择插件
  7. 【Altium designer】快捷键小技巧
  8. Java开源 Web开发框架
  9. 股指期货交易流程(股指期货交易规则详解)
  10. 我和 JSRUN 网站的一些故事