二叉树非递归中序遍历,思路是啥呢?
我想敲出代码来,但是想不通这种分叉的东西怎么写,也想不透怎么把根节点的位置顺序体现出来
4条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
threenewbee 2020-04-25 14:30最佳回答 专家已采纳拿 https://blog.csdn.net/qq_44556821/article/details/96423326 这个程序改了下。
#include <stack> #include <iostream> using namespace std; class TreeNode { private: char name_; public: int State;//状态值 TreeNode* leftNode; TreeNode* rightNode; public: TreeNode(char a):name_(a) { State = 0; leftNode = NULL; rightNode = NULL; } char getName() { return name_; } }; void MiddlePush(TreeNode& TreeTop); int main(){ //初始化树 TreeNode node1('A'); TreeNode node2('B'); TreeNode node3('C'); TreeNode node4('D'); TreeNode node5('E'); TreeNode node6('F'); TreeNode node7('G'); TreeNode node8('H'); TreeNode node9('I'); node1.leftNode = &node2; node1.rightNode = &node3; node2.leftNode = &node4; node2.rightNode = &node5; node3.rightNode = &node6; node4.leftNode = &node7; node4.rightNode = &node8; node6.leftNode = &node9; MiddlePush(node1); } void MiddlePush(TreeNode& TreeTop) { stack<TreeNode> STN; STN.push(TreeTop); while (STN.size()) { TreeNode Top = STN.top(); if (!Top.State) { STN.pop(); Top.State = 1; STN.push(Top); if (Top.rightNode) { STN.pop(); STN.push(*Top.rightNode); STN.push(Top); } if (Top.leftNode) { STN.push(*Top.leftNode); } } else { cout << Top.getName() << ends; STN.pop(); } } cout << endl; }
采纳该答案 已采纳该答案 专家已采纳评论解决 无用 1打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(3条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2020-04-22 12:59回答 2 已采纳 你好呀,这个问题属于 中缀表达式 和 前缀表达式(也称波兰式)的相互转换。 以下是我的纸质演算过程。  bt=s[top--] 出栈。取出top位置的元素,并且堆栈往后收缩一个。 4 中序需要将父节点入栈 后序不需要堆栈
- 2019-12-19 21:02问题一 二叉树遍历 1. 问题描述 设输入该二叉树的前序序列为 ABC#DE#G#F#HI#J#K# #代表空子树 请编程完成下列任务 请根据此输入来建立该二叉树 并输出该二叉树的前序 中序和后序序列 按层次遍历的方法来输出该二叉树...
- 2020-12-17 00:52问题一:二叉树遍历 问题一: 问题描述 设输入该二义树的前序序列为 ABC#DE#G#F#HI#J#K蝴代表空子树 请编程完成下列任务 请根据此输入来建立该二义树并输出该二义树的前序中序和后序序列 按层次遍历的方法来输出该二义...
- 2018-11-11 19:24数据结构试验3二叉树建立,遍历等操作代码及运行结果。 实验内容: 采用二叉链表存储,实现二叉树的创建、遍历(递归)、赫夫曼编码和译码等典型操作。 1. 编程实现如下功能: (1)假设二叉树的结点值是字符型,...
- 2020-04-29 23:45回答 3 已采纳 这个和你的使用场景有关。 有时候需要顺序,有时候不需要。 比如说二元运算 a+b和b+a满足交换律,那么顺序就不重要。 a ** b(表示a的b次方)、a/b,不满足,顺序就很重要。 如
- 2020-04-25 23:32回答 1 已采纳 思想就是,如果我们要遍历一个二叉树,需要一个堆栈。 遍历一个“一叉树“(你可以把链表或者顺序表也看作二叉树特例,只是它所有节点的度都是1)不需要堆栈 为什么呢,因为当出现2个分支的时候,我们必须先
- 2021-05-05 10:45回答 3 已采纳 #include<stdio.h> #include<stdlib.h> typedef char TElemType ; #define ERROR 0; typedef
- 2021-10-26 23:33码猿小菜鸡的博客 二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树 二叉树的性质 二叉树遍历 二叉树有三种遍历方式,...
- 2021-01-20 06:08鉴于python做为脚本语言的简洁性,这里写一篇小文章用python实现二叉树,帮助一些对数据结构不太熟悉的人快速了解下二叉树。本文主要通过python以非递归形式实现二叉树构造、前序遍历,中序遍历,后序遍历,层次遍历...
- 2022-02-07 20:43爽爽不会编程的博客 层次遍历:根据队列的原理,先将根节点入队,在出队,再将根节点的左右孩子入队,先出左孩子,在入左节点的左右孩子,再出右节点,再入右节点的左右孩子,再出..知道队列为空。
- 2020-04-30 13:31回答 3 已采纳 递归遍历代码简洁,首先推荐 非递归遍历,不受递归深度限制,效率高,如果前者性能遇到问题,再用这个办法, 这也是一个原则性,你应该了解 编写程序的一般做法是,先用最简单的方式实现出来,再对
- 2020-04-21 23:05回答 1 已采纳  任何一个二叉树都可以通过上面的图生成(当然,单个节点
- 2020-04-26 22:58回答 1 已采纳  看这个图,比如说先序遍历 传统的,每个节点存储左右
- 2021-08-11 15:36/创建二叉树 //初始化二叉树 //创建队列 //出队 //队列判空 //入队 //先序递归遍历 //后序递归遍历 //中序递归遍历 //层次遍历
- 2020-06-20 15:36我叫向同学的博客 文章目录二叉树遍历原理二叉树遍历方法前序遍历中序遍历中序遍历算法后序遍历后续遍历算法层序遍历二叉树遍历的性质 二叉树遍历原理 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个...
- 2018-11-27 20:451、假设二叉树的结点值是字符,根据输入的一颗二叉树的标明了空子树的完整先根遍历序列,建立一棵以二叉链表表示的二叉树。 2、对二叉树进行先根、中根和后根遍历操作,并输出遍历序列,同时观察输出序列是否与逻辑...
- 2022-01-02 23:32回答 1 已采纳 Node 类重写toString方法即可。
- 2011-04-18 20:43数据结构实验题(二叉树的遍历)1、用前序方法建立一棵二叉树。 2、编写前序遍历二叉树的程序。 3、编写中序遍历二叉树的程序。 4、编写后序遍历二叉树的程序。 5、编写统计二叉树叶子结点个数的程序
- 没有解决我的问题, 去提问