【问题标题】:Binary Tree Search Implementation and function declaration c++二叉树搜索实现和函数声明c ++
【发布时间】:2015-03-20 15:39:06
【问题描述】:

如何在 main 中声明 tree_search 函数?我试过这样做,但我不断得到一些奇怪的结果。我想要做的是在二叉树中搜索节点0,11,如果找到就显示它。请帮助:D

#include <iostream>

class BinTreeNode {
public:
    BinTreeNode(int value) {
        this->value = value;
        this->left = NULL;
        this->right = NULL;
    }
    int value;
    int target;
    BinTreeNode* left;
    BinTreeNode* right;
};

BinTreeNode* tree_insert(BinTreeNode* tree, int item) {
    if (tree == NULL)
        tree = new BinTreeNode(item);
    else if (item < tree->value)
        if (tree->left == NULL)
            tree->left = new BinTreeNode(item);
        else
            tree_insert(tree->left, item);
    else if (tree->right == NULL)
        tree->right = new BinTreeNode(item);
    else
        tree_insert(tree->right, item);
    return tree;
}

void postorder(BinTreeNode* tree) {
    if (tree->left != NULL)
        postorder(tree->left);
    if (tree->right != NULL)
        postorder(tree->right);
    std::cout << tree->value << std::endl;
}

void in_order(BinTreeNode* tree) {
    if (tree->left != NULL)
        in_order(tree->left);
    std::cout << tree->value << std::endl;
    if (tree->right != NULL)
        in_order(tree->right);
}

BinTreeNode* tree_search(BinTreeNode* tree, int target) {
    BinTreeNode* r = tree;
    while (r != NULL) {
        if (target == r->value)
            std::cout << r << std::endl;
        else if (target > r->value)
            r = r->left;

        else
            r = r->right;
        std::cout << r << std::endl;
    }
}

int main(int argc, char* argv[]) {
    BinTreeNode* t = tree_insert(0, 6);
    tree_insert(t, 10);
    tree_insert(t, 5);
    tree_insert(t, 2);
    tree_insert(t, 3);
    tree_insert(t, 4);
    tree_insert(t, 11);

    in_order(t);
    tree_search(t, 11);

    return 0;
}

输出

2
4
5
6
10
11
0x6c6f28   //at the moment im getting these weird characters and i want it to 
0x6c6f40   // display the (0,11) node if it was found
0

【问题讨论】:

    标签: c++ function binary-tree binary-search-tree declaration


    【解决方案1】:

    你得到奇怪字符的原因是你输出了一个指向数据结构的指针。然后打印它的内存地址。

    代替:

    std::cout << r << std::endl;
    

    考虑使用:

    std::cout << r->value << std::endl;
    

    虽然请注意,对于第二种情况,您需要用“if (r)”将表达式包装起来,这样程序就不会因为访问 NULL 指针而崩溃。

    您还可以定义一个运算符,允许直接打印指向数据结构的指针。

    【讨论】:

    • 我已经按照你说的做了,但我仍然没有得到正确的结果输出现在是 2 3 4 5 6 10 11 5 2 ....最后我得到了 5 和 2而不是打印 11 :(
    猜你喜欢
    • 2013-05-03
    • 1970-01-01
    • 2011-01-04
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多