二叉树前、中、后序遍历【非递归】【LintCode测试平台】
来源:互联网 发布:奇迹暖暖每章套装知乎 编辑:程序博客网 时间:2024/06/15 08:03
定义节点
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
前序遍历
vector<int> preorderTraversal(TreeNode *root){ vector<int> result; //最终结果 stack<TreeNode*> s; //定义栈存放节点,【注意类型】 while( root != NULL || !s.empty() ){ /*将所有root节点下的左节点入栈*/ while( root != NULL ){ result.push_back(root->val);//访问root s.push(root); root = root->left; } /*左节点入栈完毕,可以访问左节点,即栈顶元素*/ TreeNode * temp = s.top(); s.pop();//出栈一个元素,即最后一个入栈的左节点 root = temp->right;//以temp的右节点作为新的根 } return result;}
中序遍历
与前序遍历差不多,只是访问节点的时间不同:
- 前序遍历每进栈一个左节点立即访问
- 中序遍历当所有左节点入栈完后再访问最后一个左节点
vector<int> inorderTraversal(TreeNode *root){ vector<int> result;//最终结果 stack<TreeNode*> s; //定义栈存放节点,【注意类型】 while(root != NULL || !s.empty()){ /*将root下所有左节点入栈*/ while(root != NULL){ s.push(root); root = root->left; } TreeNode *temp = s.top(); s.pop();//出栈最后一个左节点 result.push_back(temp->val);//访问 root = temp->right;//以temp的右节点作为新的根 } return result;}
后序遍历
vector<int> postorderTraversal(TreeNode *root){ vector<int> result; stack<TreeNode *> s; if( root != NULL ){ do{ while(root != NULL ){ //将所有左节点进栈 s.push(root); root = root->left; } TreeNode *temp = NULL;//指向栈顶节点的前一个已经访问过的节点 bool flag = true;//标志左孩子已经访问过或为空 while( !s.empty() && flag ){ root = s.top(); if( root->right == temp ){ result.push_back(root->val);//访问 s.pop(); temp = root; }else{ root = root->right;//指向右节点 flag = false;//root的左节点未访问 } } }while( !s.empty() ); } return result;}
0 0
- 二叉树前、中、后序遍历【非递归】【LintCode测试平台】
- 二叉树非递归前、中、后序遍历
- 二叉树非递归前、中、后序遍历实现
- 二叉树的非递归【前/中/后 序遍历】
- 非递归前,中,后序遍历二叉树
- lintcode-二叉树的前序遍历(非递归)-66
- 前,中,后序遍历二叉树 (递归 && 非递归的栈 && 非递归非栈的线索二叉树)
- 【二叉树】 前序、中序和后序的递归遍历与非递归遍历
- 前、中、后、序递归遍历二叉树以及非递归遍历
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- 二叉树前、中、后及层次非递归遍历
- 二叉树的前,中,后遍历(非递归)
- 二叉树前、中、后非递归遍历
- 二叉树非递归遍历 (前,中,后) c
- 二叉树的前、中、后序、层序遍历 非递归 测试:ABC##DE#G##F###
- 二叉树的创建,遍历(前序,中序,后序)-递归 非递归
- 二叉树的前序、中序、后序遍历 递归非递归实现
- 二叉树建立,递归,非递归,前序,中序,后序遍历
- 浅谈微信卡券功能开发(1)
- vmstat命令的输出解释
- MySQL技术内幕InnoDB存储引擎学习笔记(第六章)
- CUDA编程_DEBUG_01
- 监听activeMQ的状态
- 二叉树前、中、后序遍历【非递归】【LintCode测试平台】
- Linux下自动检测USB热插拔
- 快速排序
- 简单写一个加入组播组接收到数据的代码
- Android studio真的很坑啊,智能还很远,麻烦倒是挺多
- APP直播源码、云豹直播破解版
- 顺序表应用3:元素位置互换之移位算法
- java内部类学习笔记
- 水经注下载的DAT文件用什么软件打开