C++实现二叉树非递归遍历方法实例总结
一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的。现举一个非递归遍历的方法如下,供大家参考。
具体代码如下:
classSolution{ 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); } returnout; } vector<int>inorderTraversal(TreeNode*root){ stack<TreeNode*>s; vector<int>out; TreeNode*node=root; booldone=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; } } } returnout; } 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()); returnout; } };
希望本文所述对大家的C++算法学习有所帮助。