二叉树的四种遍历方式

二叉树的遍历

  • 二叉树常见的遍历方式有层序遍历,前序遍历,中序遍历,后序遍历

层序遍历

从顶部到底部,逐层进行遍历,且每一层按照从左到右的顺序遍历

层序遍历本质上是广度优先遍历(BFS)

代码实现

广度优先遍历一般使用队列来实现

/* 层序遍历 */
vector levelOrder(TreeNode *root) {
    // 初始化队列,加入根节点
    queue queue;
    queue.push(root);
    // 初始化一个列表,用于保存遍历序列
    vector vec;
    while (!queue.empty()) {
        TreeNode *node = queue.front();
        queue.pop();              // 队列出队
        vec.push_back(node->val); // 保存节点值
        if (node->left != nullptr)
            queue.push(node->left); // 左子节点入队
        if (node->right != nullptr)
            queue.push(node->right); // 右子节点入队
    }
    return vec;
}
//递归思想
/* 前序遍历 */
void preOrder(TreeNode *root) {
    if (root == nullptr)
        return;
    // 访问优先级:根节点 -> 左子树 -> 右子树
    vec.push_back(root->val);
    preOrder(root->left);
    preOrder(root->right);
}

/* 中序遍历 */
void inOrder(TreeNode *root) {
    if (root == nullptr)
        return;
    // 访问优先级:左子树 -> 根节点 -> 右子树
    inOrder(root->left);
    vec.push_back(root->val);
    inOrder(root->right);
}

/* 后序遍历 */
void postOrder(TreeNode *root) {
    if (root == nullptr)
        return;
    // 访问优先级:左子树 -> 右子树 -> 根节点
    postOrder(root->left);
    postOrder(root->right);
    vec.push_back(root->val);
}

你可能感兴趣的:(数据结构,数据结构)