4.3二叉树的非递归中序遍历输出王道数据结构例程实现

#include <stdio.h>
#include <stdlib.h>#define MaxSize 50
typedef int ElemType;typedef struct BiTNode{ElemType data;struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;typedef struct DNode{BiTree data[MaxSize];int top;
}SqStack;void InitStack(SqStack &S){S.top=-1;
}bool IsEmpty(SqStack &S){if(S.top==-1)return true;elsereturn false;
}bool Push(SqStack &S,BiTree x){if(S.top==MaxSize-1){return false;}S.data[++S.top]=x;return true;
}bool Pop(SqStack &S,BiTree &x){if(-1==S.top)return false;x=S.data[S.top--];return true;
}bool GetTop(SqStack &S,BiTree &x){if(-1==S.top)return false;x=S.data[S.top];return true;
}BiTree CreateBiTree(BiTree &T){//利用先序遍历创建二叉树int x;                      //可输入1204600030500  每输入一个数字按一次回车 王道书上例程scanf("%d",&x);if(x!=0){                   //等于0时跳过,所以该节点还为空T=(BiTree)malloc(sizeof(BiTNode));T->data=x;T->lchild=NULL;T->rchild=NULL;T->lchild=CreateBiTree(T->lchild);T->rchild=CreateBiTree(T->rchild);}return T;
}void InOrder(BiTree T){   //中序遍历递归输出if(T!=NULL){InOrder(T->lchild);int a=T->data;printf(" %d",a);InOrder(T->rchild);}
}void InOrder2(BiTree T){//利用栈,中序遍历非递归输出SqStack S;//定义新栈InitStack(S);BiTree p=T;//初始化栈,定义p指针,把根节点赋给pwhile(p||!IsEmpty(S)){ //如果不加取反!第一次执行完,第二次执行时,p为空,栈不为空,跳出循环if(p){Push(S,p);p=p->lchild;}else{Pop(S,p);int a=p->data;printf(" %d",a);p=p->rchild;}}
}int main()
{BiTree T;CreateBiTree(T);//printf("前序遍历结果\n");// PreOrder2(T);InOrder(T);//递归输出printf("\n中序遍历结果\n");InOrder2(T);//非递归输出//   printf("\n后序遍历结果\n");//  PostOrder2(T);system("pause");
}
//前序后序的以后补上

代码运行输出

4.3二叉树的非递归中序遍历输出王道数据结构例程实现相关推荐

  1. 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树

    import java.util.Stack;public class Front {//非递归前序遍历public void front(TreeNode node) {Stack<TreeN ...

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

    第一次动手写二叉树的,有点小激动,64行的if花了点时间,上传leetcode一次点亮~~~ 1 /* inorder traversal binary tree */ 2 #include < ...

  3. 数据结构之---非递归中序遍历二叉树

    二叉树中序非递归遍历算法实现 大家好,我是逝去的粒子,从今天起,我将尝试着数据结构从0开始学习分享,此篇文章作为试验,一方面可以为自己做笔记防止遗忘,另一方面希望可以帮助大家.不废话,正式开始. 1. ...

  4. 非递归中序遍历二叉树总结(2种方法)

    算法 非递归中序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.03 传送门 非递归先序遍历二叉树 非递归后序遍历二叉树 方法1 先序遍历是第一次遇到该节点遍历 ...

  5. 非递归中序遍历二叉树

    中序遍历二叉树(递归) void inOrder(BT* root) {if (root == NULL)return;inOrder(root->lchild);cout << & ...

  6. 不用栈实现二叉树非递归中序遍历

    偶尔看到这样一个问题: 有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针. 要求不用递归,中序遍历这棵树.另要求空间复杂度是O(1). 空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所 ...

  7. 二叉树非递归中序遍历

    二叉树的中序遍历 为什么把中序遍历放在最前面呢,因为在非递归遍历中,这个是最简单也是最容易理解的,所以放在第一个的位置. 中序遍历的递归算法很简单,但是想要非递归的实现,就要用到栈这个数据结构, 那么 ...

  8. 无栈非递归中序遍历非线索化二叉树

    试设计一个非递归算法,按中根顺序遍历非线索二叉树,但不得用任何辅助. 在执行算法期间,允许改变LLINK和RLINK的值. 如何不用辅助栈非递归遍历二叉树呢? 这里给出了一个比较方便的算法,其基本思路 ...

  9. 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)

    一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...

  10. Python实现二叉树的非递归先序遍历

    思路: 1. 使用列表保存结果: 2. 使用栈(列表实现)存储结点: 3. 当根结点存在,保存结果,根结点入栈: 4. 将根结点指向左子树: 5. 根结点不存在,栈顶元素出栈,并将根结点指向栈顶元素的 ...

最新文章

  1. java 前端基础知识_【计算机·知识】关于前端的计算机基础知识
  2. python卸载opencv_怎么为python安装新版的opencv模块-百度经验
  3. 1355. 母亲的牛奶【一般 / DFS爆搜】
  4. pandas to_csv 最左边 多一列 索引值 问题处理
  5. 可能是全网首个前端源码共读活动,诚邀加入学习
  6. Docker简介和安装
  7. Lua字符串库中的几个重点函数介绍
  8. 【转载】Mysql注入点在limit关键字后面的利用方法
  9. IntelliJ Idea学习笔记006---Idea左侧栏不显示目录结构
  10. VSTO 3.0 for Office 2007 Programming
  11. 软件设计师历年真题(2016-2021)
  12. 破解锐捷--实现路由器认证锐捷,轻松开WiFi
  13. Java学生管理系统-增删改查
  14. 7805和78l05可以代换吗_7805引脚图稳压
  15. android全局屏幕自动旋转,Android屏幕旋转
  16. linux下操作3G模块
  17. 2022年计算机视觉领域五大发展趋势
  18. 学习笔记-局域网和城域网(二)
  19. Map阶段分析之Spill阶段
  20. 【龙印】3d打印固件Marlin中bresenham算法注解

热门文章

  1. 什么叫工作波长,截止波长和波导波长
  2. 稳定性及性能调优<二十四>-------性能优化3【页面加载耗时优化实战、页面滑动流畅度FPS优化实战】
  3. 嵌入式中的人工神经网络
  4. HDMI中所说的EDID是什么
  5. 6-2 递归方法:汉诺塔问题 (10 分)
  6. mysql数据库查询总条数
  7. 三阶魔方大中小魔公式_七步玩转三阶魔方还原公式图解 + 视频
  8. Ubuntu Vmware虚拟机网络配置(一)
  9. Android Material-dialogs的使用(kotlin)
  10. 男女逗段,瞅瞅有没有说到你