二叉树的基本遍历算法
来源:互联网 发布:淘宝众筹玩法 编辑:程序博客网 时间:2024/04/30 10:13
基本数据结构
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};
前序遍历
class Solution {public: vector<int> preorderTraversal(TreeNode *root) { vector<int> visit; prevIterativeTraversal(root, visit); return visit; } void prevTraversal(TreeNode * root, vector<int> &visit) { if(root == NULL) return; else { visit.push_back(root->val); prevTraversal(root->left, visit); prevTraversal(root->right,visit); } } void prevIterativeTraversal(TreeNode *root, vector<int> &visit) { stack<TreeNode*> nodeStack; TreeNode *iterator = root; TreeNode *prev = root; iterator = root; while(iterator != NULL || !nodeStack.empty()) { while(iterator != NULL) //一直搜索该结点的左孩子 { prev = iterator; nodeStack.push(iterator); visit.push_back(iterator->val); iterator = iterator->left; } iterator = nodeStack.top(); //弹出结点 nodeStack.pop(); iterator = iterator->right; //访问该结点的右孩子 } }};中序遍历
class Solution {public: vector<int> midorderTraversal(TreeNode *root) { vector<int> visit; midIterativeTraversal(root, visit); return visit; } void midTraversal(TreeNode * root, vector<int> &visit) { if(root == NULL) return; else { midTraversal(root->right,visit); visit.push_back(root->val); midTraversal(root->left, visit); } } void midIterativeTraversal(TreeNode *root, vector<int> &visit) { stack<TreeNode*> nodeStack; TreeNode *iterator = root; TreeNode *prev = root; iterator = root; while(iterator != NULL || !nodeStack.empty()) { while(iterator != NULL) { prev = iterator; nodeStack.push(iterator); iterator = iterator->left; } iterator = nodeStack.top(); visit.push_back(iterator->val); //当该节点的右子树访问完毕的时候访问该节点 nodeStack.pop(); iterator = iterator->right; } }};后序遍历
class Solution {public: vector<int> postorderTraversal(TreeNode *root) { vector<int> visit; postIterativeTraversal(root, visit); return visit; } void postTraversal(TreeNode * root, vector<int> &visit) { if(root == NULL) return; else { postTraversal(root->left, visit); postTraversal(root->right,visit); visit.push_back(root->val); } } void postIterativeTraversal(TreeNode *root, vector<int> &visit) { stack<TreeNode*> nodeStack; TreeNode *iterator = root; TreeNode *prev = root; iterator = root; while(iterator != NULL || !nodeStack.empty()) { while(iterator != NULL) //如果该结点不为空,那么一直寻找左孩子结点 { prev = iterator; nodeStack.push(iterator); iterator = iterator->left; } prev = iterator; iterator = nodeStack.top(); while (iterator->right == prev) //判断当前结点的右子树是否已经遍历完毕 { nodeStack.pop(); visit.push_back(iterator->val); //当右子树遍历完毕便可以写入该结点的值 if(nodeStack.empty()) return; prev = iterator; iterator = nodeStack.top(); } prev = iterator; iterator = iterator->right; } }};层次遍历
class Solution {public: vector<int> levelorderTraversal(TreeNode *root) { vector<int> visit; queue<TreeNode*> nodeQueue; TreeNode *iterator = NULL; if(root != NULL) nodeQueue.push(root); while (!nodeQueue.empty()) { iterator = nodeQueue.front(); nodeQueue.pop(); visit.push_back(iterator->val); if (iterator->left != NULL) nodeQueue.push(iterator->left); if (iterator->right != NULL) nodeQueue.push(iterator->right); } return visit; }};
0 0
- 二叉树的基本遍历算法
- 二叉树的基本遍历算法
- 【Python排序搜索基本算法】之二叉树的遍历
- 第十周-二叉树遍历的基本算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 遍历二叉树的算法
- 二叉树遍历的算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 遍历二叉树的基本运算
- 二叉树的基本操作及遍历
- 二叉树的基本操作和遍历
- 二叉树的三种基本遍历
- 二叉树的基本遍历程序
- Ubuntu彻底删除MySQL重装MySQL
- sqlserver时间转换
- 按块读取大文件
- 白盒测试 题目
- vim map nmap
- 二叉树的基本遍历算法
- 工作队列
- Java代码——计算两个HashMap的余弦相似度
- getaddrinfo()函数详解
- PB-Powerbuilder
- 拐坑删塘赖级滩敌
- Android中自定义View的MeasureSpec使用
- 书摘笔记
- 使用 Phrase 格式化 Android 字符串