k_eckel:http://www.mscenter.edu.cn/blog/k_eckel & http://k-eckel.cnblogs.com
二叉树是很有用的一种数据结构,遍历则是其基本操作,这里列出实是保证完整性。几个备用的结构定义和函数:
|
//二叉树节点定义 class TreeNodeElement { public: TreeNodeElement(); TreeNodeElement(int value);
TreeNodeElement(int value,TreeNodeElement* l,TreeNodeElement* r); ~TreeNodeElement(); private: public: int _value; TreeNodeElement* _l; TreeNodeElement* _r; }; typedef TreeNodeElement* TreeNode; |
|
//递归实现(visit) void Visit(TreeNode node) { cout<<node->_value<<" "; } |
二叉树中序遍历的递归和非递归实现:
|
//递归遍历 void BinRetriveATree(TreeNode root,void (* visit)(TreeNode)) { if (root) { BinRetriveATree(root->_l,visit); (*visit)(root); BinRetriveATree(root->_r,visit); }
} |
|
//非递归遍历,添加#include <stack> void BinRetriveATreeWithoutRecurve(TreeNode root,void (* visit)(TreeNode)) { stack<TreeNode> tree; while ((root != NULL) || (!tree.empty())) { while (root != NULL) { tree.push(root); root = root->_l; } if (!tree.empty()) { root = tree.top(); tree.pop(); visit(root);
root = root->_r; //转到右子树 } } } |
浙公网安备 33010602011771号