#include <vector>
#include <stack>
#include <queue>
using namespace std; struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(nullptr),right(nullptr){};
}; void preOrder(TreeNode* root,vector<int>& res){
if(root == nullptr) return;
res.push_back(root->val);
preOrder(root->left,res);
preOrder(root->right,res);
} void inOrder(TreeNode* root,vector<int>& res){
if(root == nullptr) return;
inOrder(root->left,res);
res.push_back(root->val);
inOrder(root->right,res);
} void postOrder(TreeNode* root,vector<int>& res){
if(root == nullptr) return;
postOrder(root->left,res);
postOrder(root->right,res);
res.push_back(root->val);
} vector<int> preOrder(TreeNode* root){
vector<int> res;
if(root == nullptr) return res; stack<TreeNode*> st;
TreeNode* cur = root;
while(cur || !st.empty()){
while(cur){
res.push_back(cur->val);
st.push(cur);
cur = cur->left;
}
if(!st.empty()){
cur = st.top();
st.pop();
cur = cur->right;
}
}
return res;
} vector<int> inOrder(TreeNode* root){
vector<int> res;
if(root==nullptr) return res; stack<TreeNode*> st;
TreeNode* cur = root;
while(cur || !st.empty()){
while(cur){
st.push(cur);
cur = cur->left;
}
if(!st.empty()){
cur = st.top();
st.pop();
res.push_back(cur->val);
cur = cur->right;
}
}
return res;
} vector<int> postOrder(TreeNode* root){
vector<int> res;
if(root == nullptr) return res; stack<TreeNode*> st;
TreeNode* cur = root;
while(cur){
st.push(cur);
cur = cur->left;
} TreeNode* lastVisited = nullptr;
while(!st.empty()){
cur = st.top();
st.pop();
if(cur->right == nullptr || cur->right == lastVisited){
res.push_back(cur->val);
lastVisited = cur;
}else{
st.push(cur);
cur = cur->right;
while(cur){
st.push(cur);
cur = cur->left;
}
}
}
return res;
} vector<int> levelOrder(TreeNode* root){
vector<int> res;
if(root == nullptr) return res; queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
size_t n = q.size();
for(size_t i=;i<n;i++){
TreeNode* cur = q.back();
q.pop();
res.push_back(cur->val);
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
}
return res;
}

leetcode(144,94,145,102)中迭代版的二叉树的前、中、后、层级遍历的更多相关文章

  1. leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树

    题目: 105 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  2. java实现二叉树的前中后遍历(递归和非递归)

    这里使用下图的二叉树作为例子: 首先建立树这个类: public class Node { private int data; private Node leftNode; private Node ...

  3. Qt实现 动态化遍历二叉树(前中后层次遍历)

    binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...

  4. Java 非递归实现 二叉树的前中后遍历以及层级遍历

    class MyBinaryTree<T> { BinaryNode<T> root; public MyBinaryTree() { root = new BinaryNod ...

  5. Binary Tree Traversal 二叉树的前中后序遍历

    [抄题]:二叉树前序遍历 [思维问题]: 不会递归.三要素:下定义.拆分问题(eg root-root.left).终止条件 [一句话思路]: 节点非空时往左移,否则新取一个点 再往右移. [输入量] ...

  6. POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)

    链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...

  7. 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树

    出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...

  8. LC 144. / 94. / 145. Binary Tree Preorder/ Inorder/ PostOrder Traversal

    题目描述 144. Binary Tree Preorder Traversal 94. Binary Tree Inorder Traversal 145. Binary Tree Postorde ...

  9. LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)

    题目描述 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路 后 ...

随机推荐

  1. 左边图标右边文字,在div里居中

  2. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  3. linux进程编程:子进程创建及执行函数简介

    linux进程编程:子进程创建及执行函数简介 子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定 ...

  4. iOS开发 ReactiveCocoa入门教程 第一部分

    作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...

  5. Spring—Quartz定时调度CronTrigger时间配置格式说明与实例

    1 .CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 ...

  6. 【ros bug】rplidar.launch is neither a launch file in package...

    解决 :cd catkin_ws $ source devel/setup.bash

  7. AlwaysOn与数据库镜像端点问题

    今天在搭建一个测试环境的时候发现一个问题,我将AlwaysOn环境中某节点上的某个非可用性组里的数据库想实时备份到另外一台服务器上,因此我找了一个没有加域的工作组的服务器,与AlwaysOn主节点去搭 ...

  8. Python之路 day2 字符串函数

    #Author:ersa name = "ersa" #首字母大写capitalize() print(name.capitalize()) name = "my nam ...

  9. VMWARE + CENTOS在windows下配置cocos2d-x android开发环境

    VMWARE + CENTOS在windows配置cocos2d-x android开发环境 之前使用cygwin在windows开发android,后来使用了c++11特性,在cygwin中更新工具 ...

  10. mongodb unclean shutdown 修复方法

    启动mongodb时,提示Unclean shutdown detected mongodb,解决方法很简单 mongod --repair --dbpath D:\MongoDB\data\db