#include<iostream>
#include<stack>
#include<queue>
//节点结构体
struct Node{int value;Node * left;Node * right;Node(int value):value(value),left(NULL),right(NULL){}
};
//构建二叉树
void inertNode(Node *node,int value){if(value<=node->value){if(!node->left){node->left=new Node(value);}else{inertNode(node->left,value);}}else{if(!node->right){node->right=new Node(value);}else{inertNode(node->right,value);}}
}
//前序遍历递归实现
void preOrder(Node *node){if(node){std::cout<<node->value;preOrder(node->left);preOrder(node->right);}
}//前序遍历非递归实现
class Solution {public:vector<int> preorderTraversal(TreeNode* root) {            if (!root) return {};vector<int> res;stack<TreeNode*> s{{root}};while (!s.empty()) {TreeNode *t = s.top();s.pop();res.push_back(t->val);if (t->right) s.push(t->right);if (t->left) s.push(t->left);            }return res;}
};//中序遍历递归实现
void inOrder(Node *node){if(node){inOrder(node->left);std::cout<<node->value;inOrder(node->right);}
}
//中序遍历非递归实现
void inOrder1(Node *node){std::stack<Node *> nstack;Node *temp=node;while(temp||!nstack.empty()){if(temp){nstack.push(temp);temp=temp->left;}else{temp=nstack.top();std::cout<<temp->value;nstack.pop();temp=temp->right;}}
}//后序遍历递归实现
void posOrder(Node *node){if(node){posOrder(node->left);posOrder(node->right);std::cout<<node->value;}
}
//后序遍历非递归实现
void posOrder1(Node *node){if(node==NULL)return;std::stack<Node *> nstack1, nstack2;nstack1.push(node);while (!nstack1.empty()){Node *temp=nstack1.top();nstack1.pop();nstack2.push(temp);if(temp->left)nstack1.push(temp->left);if(temp->right)nstack1.push(temp->right);}while(!nstack2.empty()){std::cout<<nstack2.top()->value;nstack2.pop();}
}
//后序遍历非递归实现
class Solution {public:vector<int> postorderTraversal(TreeNode* root) {if (!root) return {};vector<int> res;stack<TreeNode*> s{{root}};while (!s.empty()) {TreeNode *t = s.top();s.pop();res.insert(res.begin(), t->val);if (t->left) s.push(t->left);if (t->right) s.push(t->right);}return res;}
};//广度优先遍历(层序遍历)
void broadOrder(Node *node){if(!node){return;}std::queue<Node *> qnodes;qnodes.push(node);while(!qnodes.empty()){Node * temp=qnodes.front();std::cout<<temp->value;qnodes.pop();if(temp->left){qnodes.push(temp->left);}if(temp->right){qnodes.push(temp->right);}}
}
int main(){int n;while(std::cin>>n){n--;int value;std::cin>>value;Node root(value);while(n--){int newValue;std::cin>>newValue;inertNode(&root,newValue);}std::cout<<"preOrder is:";preOrder(&root);std::cout<<std::endl;std::cout<<"inOrder is:";inOrder(&root);std::cout<<std::endl;std::cout<<"PosOrder is:";posOrder(&root);std::cout<<std::endl;std::cout<<"PreOrder without recursion is:";preOrder1(&root);std::cout<<std::endl;std::cout<<"inOrder without recursion is:";inOrder1(&root);std::cout<<std::endl;std::cout<<"PosOrder without recursion is:";posOrder1(&root);std::cout<<std::endl;std::cout<<"BroadOrder is:";broadOrder(&root);}
}---------------------
作者:叶赫那拉坤
来源:CSDN
原文:https://blog.csdn.net/u010558281/article/details/74276577
版权声明:本文为博主原创文章,转载请附上博文链接!

先序abdfcegh 中序bfdagehc 后序线索二叉树_二叉树的遍历(先序、中序、后序、层序)...相关推荐

  1. 先序abdfcegh 中序bfdagehc 后序线索二叉树_二叉树的遍历和线索二叉树

    二叉树的遍历是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,且只被访问一次. 先序遍历(NLR) 若二叉树为空,则什么也不做:否则, (1)访问根结点. (2)先序遍历左子树. (3) ...

  2. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  3. 二叉树的非递归遍历(前序中序后序非递归C语言)

    前两天做数据结构实验,要求用非递归算法遍历二叉树.只知道用栈来储存数据,具体算法还不太清楚.经过两天的搜索,看到网上很多种解法,很多解法都是用C++来写的算法,一直找不到用C语言写的算法,所以就总结了 ...

  4. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)

    树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...

  5. Mysql要在表s中增加一列可用什么语句_要在基本表S中增加一列CN(课程名),可用语句()_学小易找答案...

    [填空题]在SQL中,要删除一个表,应使用的语句是( )TABLE. [单选题]精神检查的方法主要有( ) [单选题]护士从病人的书信.日记了解病人的情况是属于( ) [单选题]显示当前所有数据库的命 ...

  6. 【数据结构】理解二叉树的三种遍历--前序、中序、后序 +层序(简明易懂)

    一.易懂的形象理解 其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序.中序. ...

  7. python中函数提高代码执行速度吗_为什么Python代码在一个函数中运行得更快?

    匿名用户 除了局部/全局变量存储时间外,操作码预测使函数更快. 正如其他答案所解释的,该函数在循环中使用store_fast操作码.下面是函数循环的字节码:>> 13 FOR_ITER 6 ...

  8. 中如何对一个数取余_如何找到自己在一个城市中的定位?

    更多资讯,关注微信公众号:好房U购四川. 如何找到自己在一个城市中的定位? 最近,各大企业都纷纷启动了校招工作.有条件的,全国都在跑:至少,川内都要跑一跑. 而毕业生最迷茫的,不过这两个问题: 北上广 ...

  9. tomcat加上了https后访问不了_西部数码使用指南:部署https后访问提示存在安全隐患的排查解决方法...

    版权归西部数码所有,原文链接:https://www.west.cn/faq/list.asp?unid=2374 部署https后访问域名出现如下提示: 您的连接存在安全隐患 此网站使用的安全性配置 ...

最新文章

  1. 关于数据科学,书上不曾提及的三点经验
  2. 【Nginx】 server 配置记录
  3. python输出到文件
  4. 文本编辑器_国外程序员最爱的5种文本编辑器
  5. 在腾讯云控制台上对域名进行续费
  6. vscode 编辑器常用快捷键
  7. 日期与时间(C/C++)
  8. 谨防职业病 IT人士必不可少的四类食物
  9. 拓端tecdat|R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
  10. 计算机考研复试——计算机前沿知识篇
  11. android qq 文件怎么打开,如何更改腾讯QQ手机版默认的文件打开方式
  12. u盘数据恢复软件哪个好?怎么恢复u盘数据?
  13. 计算机断电硬盘数据会丢失吗,为什么突然停电后电脑硬盘数据会丢失?
  14. VC6连接Oracle10g
  15. 限制Editext输入字节长度
  16. LearnOpenGL->立方体贴图
  17. 袁腾飞的两宋风云读后感
  18. IIR滤波器设计之冲激响应不变法与双线性变换法
  19. 微信支付服务器商模式,微信支付分正式支持服务商模式!
  20. 使用计算机录制声音10,Win10电脑麦克风无法录音怎么解决 win10麦克风声音无法输入的解决方法...

热门文章

  1. android 版本更新
  2. 硬件服务器processor是什么,服务器硬件检测(采用mcelog)
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的员工事物管理系统
  4. this 的4种绑定机制
  5. jetty之嵌入式运行jetty
  6. [转载]各种在线api地址
  7. MainFrame小结(20110812)--MOVE ALL与INITIALIZE(cobol)
  8. 通过反射获取类的所有属性和方法
  9. 科学宿命论-我们到底有没有自由意志
  10. git 9个小命令(三年修仙五年摸鱼也有喔) 一条龙服务