手机
当前位置:查字典教程网 >编程开发 >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++ 字符串的反转五种方法实例

新旧MFC版本实现CEdit透明的2种方法的实例代码

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

归并排序的递归实现与非递归实现代码

C++内核对象封装单实例启动程序的类

C++实现基数排序的方法详解

先序遍历二叉树的递归实现与非递归实现深入解析

c++二叉树的几种遍历算法

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

精品推荐
分类导航