📜  门| GATE-IT-2004 |问题 27(1)

📅  最后修改于: 2023-12-03 14:58:32.805000             🧑  作者: Mango

门| GATE-IT-2004 |问题 27

本题是GATE-IT-2004考试的一道题目,考察了二叉树的遍历和搜索操作。该题需要实现二叉树的搜索操作,并返回指定数据的父节点。对于没有父节点的情况,需要返回-1。

输入格式

输入数据为一系列整数,以-1为结束标志。输入的整数会组成二叉树,其中第一个整数为根节点。

输出格式

函数需要返回指定数据的父节点,如果没有父节点,需要返回-1。

代码实现

本题中需要实现二叉树的搜索操作。可以使用递归的方式实现,对于当前节点,首先判断是否匹配,如果匹配则返回当前节点,否则递归搜索左右子树。如果当前节点的左右子树均没有匹配的数据,则说明该数据不在该树中,需要返回-1。

struct TreeNode {
    int value;
    TreeNode *left;
    TreeNode *right;
};

int findParent(TreeNode *root, int target) {
    if (root == nullptr) {
        return -1;
    }
    if (root->left != nullptr && root->left->value == target) {
        return root->value;
    }
    if (root->right != nullptr && root->right->value == target) {
        return root->value;
    }
    int leftResult = findParent(root->left, target);
    if (leftResult != -1) {
        return leftResult;
    }
    int rightResult = findParent(root->right, target);
    if (rightResult != -1) {
        return rightResult;
    }
    return -1;
}
总结

本题考察了二叉树的搜索操作,需要实现一个递归算法实现。除了该题之外,在实际的开发过程中,二叉树的搜索操作也经常会被用到,例如在数据库索引的实现中。因此,熟练掌握二叉树的基本操作至关重要。