二叉树的前序、中序、后序遍历(递归与非递归)
来源:互联网 发布:多益 知乎 编辑:程序博客网 时间:2024/05/17 21:55
本文主要总结二叉树的前序、中序、后序遍历,分为递归和非递归
(1)前序遍历:根→左→右
(2)中序遍历:左→根→右
(3)后序遍历:左→右→根
首先定义一个二叉树:
- struct BiTree
- {
- char val;
- BiTree *lchild;
- BiTree *rchild;
- };
1.递归的方法
(1)前序遍历(根→左→右)
- void PreOrderTraverse(BiTree* root)
- {
- if (root!=NULL)
- {
- cout<<root->val;
- PreOrderTraverse(root->lchild);
- PreOrderTraverse(root->rchild);
- }
- }
(2)中序遍历(左→根→右)
- void InOrderTraverse(BiTree* root)
- {
- if (root!=NULL)
- {
- InOrderTraverse(root->lchild);
- cout<<root->val;
- InOrderTraverse(root->rchild);
- }
- }
(3)后序遍历(左→右→根)
- void PostOrderTraverse(BiTree* root)
- {
- if (root!=NULL)
- {
- PostOrderTraverse(root->lchild);
- PostOrderTraverse(root->rchild);
- cout<<root->val;
- }
- }
2.非递归遍历:用到了栈
(1)前序
- vector<int> preorderTraversal(TreeNode* root) {
- vector<int> res;
- std::stack<TreeNode*> temp;
- while (root || !temp.empty()) {
- while (root) {
- temp.push(root);
- res.push_back(root->val);
- root = root->left;
- }
- root = temp.top();
- temp.pop();
- root = root->right;
- }
- return res;
- }
(2)中序
- vector<int> inorderTraversal(TreeNode* root) {
- vector<int> res;
- std::stack<TreeNode*> temp;
- while (root || !temp.empty()) {
- while (root) {
- temp.push(root);
- root = root->left;
- }
- root = temp.top();
- temp.pop();
- res.push_back(root->val);
- root = root->right;
- }
- return res;
- }
(3)后序
- vector<int> postorderTraversal(TreeNode* root) {
- vector<int> res;
- std::stack<TreeNode*> temp;
- while (root || !temp.empty()) {
- while (root) {
- temp.push(root);
- res.insert(res.begin(),root->val);
- root = root->right;
- }
- root = temp.top();
- temp.pop();
- root = root->left;
- }
- return res;
- }
0 0
- 二叉树的前序、中序、后序遍历(递归与非递归)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 二叉树的递归与非递归遍历(前序、中序、后序)
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
- JAVA实现二叉树的前、中、后序遍历(递归与非递归)
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 二叉树的前序,中序,后序的递归与非递归遍历
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- 二叉树的非递归【前/中/后 序遍历】
- 二叉树遍历(前序、中序、后序)递归与非递归
- 二叉树前、中、后序遍历(递归与非递归)
- 二叉树的创建,遍历(前序,中序,后序)-递归 非递归
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- 数据结构:二叉树的前序,中序,后序遍历(递归和非递归)
- 二叉树的递归和非递归遍历(前序、中序、后序)
- 二叉树的前序、中序、后序遍历(递归&非递归)
- php连接数据库增删改查
- 超出长度的文字用省略号…代替
- Docker私有仓库搭建
- Java:String和Date、Timestamp之间的转换
- c++常用词
- 二叉树的前序、中序、后序遍历(递归与非递归)
- sql练习
- 开发文档:移动应用支持微信小程序类型分享(Android应用)
- Context详解
- 后台ui框架------sitemesh
- spark的各种sparksubmit
- qt编译错误
- 善用设计模式(三)享元模式
- 合并两个排序链表