template <typename T> struct BinaryNode{
T elem;
BinaryNode *left;
BinaryNode * right;
BinaryNode(T d, BinaryNode *l=NULL, BinaryNode *r=NULL):elem(d),left(l),right(r){};
};
template <typename T>
void inorder_recursive(BinaryNode<T>* root, void (*visit)(T &x))
{
if(root != NULL)
{
inorder_recursive(root->left,visit);
visit(root->elem) ;
inorder_recursive(root->right,visit);
}
}
template <typename T>
T elem;
BinaryNode *left;
BinaryNode * right;
BinaryNode(T d, BinaryNode *l=NULL, BinaryNode *r=NULL):elem(d),left(l),right(r){};
};
template <typename T>
void inorder_recursive(BinaryNode<T>* root, void (*visit)(T &x))
{
if(root != NULL)
{
inorder_recursive(root->left,visit);
visit(root->elem) ;
inorder_recursive(root->right,visit);
}
}
template <typename T>
void nonRecursiveInorder(BinaryNode *root, void(*visit)(T &x))
stack<BinaryNode*> s;
p=root;//p points the current root of traversal
while(p || !s.empty())
if(p){// push root into stack and traversethe left subtree
s.push(p);
· p=p->left;
}
else{
//noleft subtree, pop out the root, visit the root
//and traverse the right subtree
p = s.top();
visit(p->data)) ;
p=p->right;
}
}
}
模板化二叉树遍历算法详解
本文详细介绍了二叉树的模板化遍历算法,包括递归和非递归两种实现方式,旨在帮助读者深入理解二叉树遍历的基本原理及其实现细节。
1129

被折叠的 条评论
为什么被折叠?



