C++数据结构学习:二叉树(1)
1.前序遍历
public:
voidPreOrder(void(*visit)(T&data)=print){PreOrder(root,visit);}
private:
voidPreOrder(BTNode*p,void(*visit)(T&data))
{
if(p){visit(p->data);PreOrder(p->left,visit);PreOrder(p->right,visit);}
}
2.中序遍历
public:
voidInOrder(void(*visit)(T&data)=print){InOrder(root,visit);}
private:
voidInOrder(BTNode*p,void(*visit)(T&data))
{
if(p){InOrder(p->left,visit);visit(p->data);InOrder(p->right,visit);}
}
3.后序遍历
public:
voidPostOrder(void(*visit)(T&data)=print){PostOrder(root,visit);}
private:
voidPostOrder(BTNode*p,void(*visit)(T&data))
{
if(p){PostOrder(p->left,visit);PostOrder(p->right,visit);visit(p->data);}
}
4.层次遍历
voidLevelOrder(void(*visit)(T&data)=print)
{
queue*>a;BTNode*p=root;//记得#include
while(p)
{
visit(p->data);
if(p->left)a.push(p->left);if(p->right)a.push(p->right);
if(a.empty())break;p=a.front();a.pop();
}
}
附注:缺省的visit函数print如下
private:
staticvoidprint(T&data){cout<
5.不用栈的非递归中序遍历
| 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。 |