二叉树的中序遍历



二叉树节点定义

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;
}



点赞