📅  最后修改于: 2023-12-03 15:42:15.346000             🧑  作者: Mango
本题是关于数据结构中二叉树的遍历问题,题目为GATE-CS-2003第38题。需要实现一个函数,对于给定的二叉树进行前序、中序、后序遍历。其中,二叉树节点的数据类型为整数。
本题需要实现三种不同的遍历方式,对于一颗二叉树,不同的遍历方式访问的顺序不同。具体实现方法如下:
前序遍历的访问顺序为:先访问根节点,然后访问左子树,最后访问右子树。实现方法为:先输出当前节点的数据,然后递归地遍历左子树和右子树。
void preorder(Node* root) {
if (root == NULL) return;
cout << root->val << " "; // 输出当前节点的数据
preorder(root->left); // 递归遍历左子树
preorder(root->right); // 递归遍历右子树
}
中序遍历的访问顺序为:先访问左子树,然后访问根节点,最后访问右子树。实现方法为:先递归地遍历左子树,然后输出当前节点的数据,最后递归遍历右子树。
void inorder(Node* root) {
if (root == NULL) return;
inorder(root->left); // 递归遍历左子树
cout << root->val << " "; // 输出当前节点的数据
inorder(root->right); // 递归遍历右子树
}
后序遍历的访问顺序为:先访问左子树,然后访问右子树,最后访问根节点。实现方法为:先递归地遍历左子树和右子树,然后输出当前节点的数据。
void postorder(Node* root) {
if (root == NULL) return;
postorder(root->left); // 递归遍历左子树
postorder(root->right); // 递归遍历右子树
cout << root->val << " "; // 输出当前节点的数据
}
本题需要实现三种不同的二叉树遍历方法,对于每种方法,都需要掌握其访问顺序和具体实现方法。需要注意的是,递归遍历过程中需要判断当前节点是否为空,以及递归遍历时传入的参数应为左子树或右子树的根节点。