二叉树的遍历
二叉树的遍历是二叉树算法中的基础操作,主要有四种遍历方式:
一 .前序遍历(Preorder Traversal)
访问根节点(Root)遍历左子树(Left subtree)遍历右子树(Right subtree)
实现
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void preorderTraversalRecursive(TreeNode* root) {
if (root == nullptr) return;
cout << root->val << " ";
preorderTraversalRecursive(root->left);
preorderTraversalRecursive(root->right);
}
二.中序遍历(Inorder Traversal)
遍历左子树(Left subtree)访问根节点(Root)遍历右子树(Right subtree
实现
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void inorderTraversalRecursive(TreeNode* root) {
if (root == nullptr) return;
inorderTraversalRecursive(root->left);
cout << root->val << " ";
inorderTraversalRecursive(root->right);
}
三.后序遍历(Postorder Traversal)
遍历左子树(Left subtree)遍历右子树(Right subtree)访问根节点(Root)
实现
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void postorderTraversalRecursive(TreeNode* root) {
if (root == nullptr) return;
postorderTraversalRecursive(root->left);
postorderTraversalRecursive(root->right);
cout << root->val << " ";
}
四.层序遍历(Level-order Traversal)
顾名思义就是指按树的层数来遍历
实现
与前三个不同的就是这个是用队列
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void levelOrderTraversal(TreeNode* root) {
if (root == nullptr) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}