二叉树的遍历(1):前序遍历

来源:互联网 发布:阿里云购买域名绑定 编辑:程序博客网 时间:2024/06/06 08:24
#include <iostream>#include <stack>#include <queue>using namespace std;typedef int TreeNodeElem;struct TreeNode {    TreeNode* left;    TreeNode* right;    TreeNodeElem elem;};//递归遍历void preOrder_R(TreeNode* root, int(*visit)(TreeNode*)){    if (root == nullptr)    {        return;    }    visit(root);    preOrder_R(root->left, visit);    preOrder_R(root->right, visit);}//非递归遍历void preOrder(TreeNode* root, int(*visit)(TreeNode*)){    TreeNode* p = root;    stack<TreeNode*> s;    if (p != nullptr)    {        s.push(p);    }    while (!s.empty())    {        p = s.top();        s.pop();        visit(p);        if (p->right != nullptr)        {            s.push(p->right);        }        if (p->left != nullptr)        {            s.push(p->left);        }    }}

0 0