二叉树的遍历
- 二叉树常见的遍历方式有层序遍历,前序遍历,中序遍历,后序遍历
层序遍历
从顶部到底部,逐层进行遍历,且每一层按照从左到右的顺序遍历
层序遍历本质上是广度优先遍历(BFS)
代码实现
广度优先遍历一般使用队列来实现
/* 层序遍历 */
vector<int> levelOrder(TreeNode *root) {// 初始化队列,加入根节点queue<TreeNode *> queue;queue.push(root);// 初始化一个列表,用于保存遍历序列vector<int> 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);
}