二叉树的遍历
2015-11-04 20:24
309 查看
下面是二叉树的遍历,先序,中序和后序都采用了栈的方式,层序使用的是递归的方式,主要是leecode的要求,二叉树的遍历还是递归容易。
#include <iostream> #include <vector> #include <stack> using std::stack; using std::vector; struct TreeNode{ int val; TreeNode* leftNode; TreeNode* rightNode; TreeNode(int x) : val(x),leftNode(nullptr),rightNode(nullptr) {} }; class Solution { public: vector<int> preOrderTraversal(TreeNode* root) { vector<int> res = {}; stack<TreeNode*> s; if(root) s.push(root); TreeNode* p; while(!s.empty()) { p = s.top(); res.push_back(p->val); s.pop(); if(p->rightNode) s.push(p->rightNode); if(p->leftNode) s.push(p->leftNode); } return res; } vector<int> inOrderTraversal(TreeNode* root) { vector<int> res = {}; stack<TreeNode*> s; TreeNode* p = root; while(!s.empty() || p) { if(p) { s.push(p); p= p->leftNode; } else { p = s.top(); res.push_back(p->val); s.pop(); p = p->rightNode; } } return res; } vector<int> postOrderTraversal(TreeNode* root) { vector<int> res = {}; stack<TreeNode*> s; TreeNode* p = root; //being access TreeNode* q = nullptr; //previous access do{ while(p) { s.push(p); p = p->leftNode; } q = nullptr; while(!s.empty()) { p = s.top(); s.pop(); if(p->rightNode == q) { res.push_back(p->val); q = p; } else { s.push(p); p = p->rightNode; break; } } }while(!s.empty()); return res; } vector<vector<int>> levelOrderTraversal(TreeNode* root) { vector<vector<int>> res; if(!root) return res; levelOrderTraversalCore(root,1,res); return res; } private: void levelOrderTraversalCore(TreeNode* root,int level,vector<vector<int>>& res) { if(!root) return; if(level > res.size()) res.push_back(vector<int>()); res[level-1].push_back(root->val); levelOrderTraversalCore(root->leftNode,level+1,res); levelOrderTraversalCore(root->rightNode,level+1,res); } };
相关文章推荐
- 软件测试读书列表
- 开发iOS应用要比开发安卓应用省时约30%
- mysql命令操作
- Leetcode138: Partition List
- Leetcode sql算法题
- leetcode-Same Tree
- atomic 加锁操作
- 【转】淘测试---新时代的测试工程师
- java语言写文件内容
- NSNotificationCenter观察者模式
- hdu1219
- 简单邻接表构造图
- Linux命令——w
- 为什么for(int i=0;i<9;i++) 在c语言中是错误的?
- hdu1219
- hdu1219
- 源生javascript将xml转换成json格式
- sde用sql实现erase
- 归并排序算法之Java实现
- Tomcat 8 解决“At least one JAR was scanned for TLDs yet contained no TLDs”问题