手机
当前位置:查字典教程网 >编程开发 >C语言 >C++实现二叉树非递归遍历方法实例总结
C++实现二叉树非递归遍历方法实例总结
摘要:一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的。现举一个...

一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的。现举一个非递归遍历的方法如下,供大家参考。

具体代码如下:

class Solution { public: vector<int> preorderTraversal(TreeNode *root) { vector<int> out; stack<TreeNode*> s; s.push(root); while(!s.empty() && root){ TreeNode *node = s.top(); out.push_back(node->val); s.pop(); if(node->right) s.push(node->right); if(node->left) s.push(node->left); } return out; } vector<int> inorderTraversal(TreeNode *root) { stack<TreeNode *> s; vector<int> out; TreeNode *node = root; bool done = false; while(!done){ if(node){ s.push(node); node = node->left; }else { if(s.empty()) done = true; else{ node = s.top(); s.pop(); out.push_back(node->val); node = node->right; } } } return out; } vector<int> postorderTraversal(TreeNode *root) { vector<int> out; stack<TreeNode*> s; TreeNode* node = root; s.push(node); while(!s.empty()&&node){ node = s.top(); out.push_back(node->val); s.pop(); if(node->left) s.push(node->left); if(node->right)s.push(node->right); } reverse(out.begin(),out.end()); return out; } };

希望本文所述对大家的C++算法学习有所帮助。

【C++实现二叉树非递归遍历方法实例总结】相关文章:

C 二分查找 递归与非递归的实现代码

C++运算符重载的方法详细解析

C++中的异或运算符^的使用方法

C++中访问字符串的三种方法总结

探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)

C++泛型算法的一些总结

c语言实现二叉查找树实例方法

C++非递归遍历磁盘文件和递归遍历磁盘文件的程序示例

C++实现两个日期间差多少天的解决方法

用C++实现DBSCAN聚类算法

精品推荐
分类导航