📜  门| GATE-CS-2003 |第 38 题(1)

📅  最后修改于: 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 << " "; // 输出当前节点的数据
}

总结

本题需要实现三种不同的二叉树遍历方法,对于每种方法,都需要掌握其访问顺序和具体实现方法。需要注意的是,递归遍历过程中需要判断当前节点是否为空,以及递归遍历时传入的参数应为左子树或右子树的根节点。