二叉树节点定义
typedef char BiTreeNodeConten;
struct BiTreeNode {
BiTreeNodeConten data;
BiTreeNode *left, *right;
};
typedef BiTreeNode *BiTreeRoot;
中序遍历-递归实现
bool inOrderR(BiTreeRoot root, bool (*visit)(BiTreeNode)) {
if (root) {
if (inOrderR(root->left, visit))
if (visit(*root))
if (inOrderR(root->right, visit))
return true;
return false;
}
return true;
}
中序遍历-非递归实现
bool inOrderS(BiTreeRoot root, bool (*visit)(BiTreeNode)) {
using namespace std;
stack<BiTreeRoot> s;
while (true) {
while (root != NULL) {
s.push(root);
root = root->left;
}
if (s.empty()) {
break;
}
root = s.top();
if (!visit(*root)) {
return false;
}
s.pop();
root = root->right;
}
return true;
}