前序遍历
访问顺序
根子树->左子树->右子树
首先访问根节点,然后递归的前序遍历左子树,最后递归的前序遍历右子树
void preOrder(TreeNode* node) {
if (node == nullptr) return;
cout << node->val << ' '; // 访问根节点
preOrder(node->left); // 递归遍历左子树
preOrder(node->right); // 递归遍历右子树
}
中序遍历
访问顺序
左子树->根子树->右子树
首先中序遍历左子树,然后中序遍历右子树,最后访问根节点
void preOrder(TreeNode* node) {
if (node == nullptr) return;
cout << node->val << ' '; // 访问根节点
preOrder(node->left); // 递归遍历左子树
preOrder(node->right); // 递归遍历右子树
}
后序遍历
访问顺序
左子树->右子树->根节点
首先后序遍历左子树,然后后序遍历右子树,最后访问根节点
void postOrder(TreeNode* node) {
if (node == nullptr) return;
postOrder(node->left); // 递归遍历左子树
postOrder(node->right); // 递归遍历右子树
cout << node->val << ' '; // 访问根节点
}
层次遍历
访问顺序
从上到下,从左到右依次遍历
利用队列实现,首先将根节点入队,然后循环进行队列操作,每次从队列中取出一个节点并访问,若该节点有左子节点,则将左子节点入队;若该节点有右子节点,则将右子节点入队