C++实现二叉树非递归遍历方法实例总结_C语言教程-查字典教程网
C++实现二叉树非递归遍历方法实例总结
C++实现二叉树非递归遍历方法实例总结
发布时间:2016-12-28 来源:查字典编辑
摘要:一般来说,二叉树的遍历是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语言学习
    编程开发子分类