C++ 二叉树构建为什么这行不通?

标签 c++ binary-tree

大家好,非常感谢您的帮助,谢谢。

首先,我正在构建一个二叉树,但似乎无法构建它。在递归过程中,insertHelper 似乎在第一次迭代中识别出更大的根,但之后不会继续构建左右以及与其连接的节点。看 在 C++ 中

标题:

struct Node {
public:
    int weight;
    Node *right;
    Node *left;
};

class Btree {
    Node *root;
    int insize;
    int taxsize;
    public:
        Btree();
        void insertOne(Node *);
        void insertHelper(Node *, Node *);
        void printTree();
        void ptHelper(Node *);  
};

类(class):

Btree::Btree() {
    this -> root = NULL;
    this -> insize =0;
    this -> taxsize =0;
}
void Btree::insertOne( Node *n ) {
        if(root==NULL) {
            root = n;
        }else {
            Node *burr;
            burr = root;
            insertHelper( n, burr);
        }
    }
void Btree::insertHelper( Node *n, Node *curr ) {
    if(curr==NULL) {
        curr = n;
    }
    if(n->weight > curr->weight) {
        insertHelper(n, curr->right);
    }
    if(n->weight < curr->weight) {
        insertHelper(n, curr->left);
    }
}
void Btree::printTree() {
    Node *current;
    current = root;
    ptHelper(current);

}
void Btree::ptHelper(Node *m){
    if(m != NULL) {
        cout<<" "<<m->weight<<" ";
        if(m->left != NULL) {
            ptHelper(m->left);
        }
        if(m->right != NULL) {
            ptHelper(m->right);
        }
    }else {
        return;
    }
}

主要内容:

int main()
{
    Btree joe;
    int insize;
    int taxsize;
    cin >> insize;
    for(int i=0; i<insize; i++) {
        int tmp;
        cin >> tmp;
        Node *diamond = new Node();
        diamond->weight = tmp;
        joe.insertOne(diamond);
    }
    joe.printTree();
    return 0;
}

最佳答案

您没有更新对 left 和 right 的引用。 试试这个:

void Btree::insertHelper( Node *n, Node *curr ) {

    if(curr==NULL) {
        curr = n;
    }
    //My debug output
    //cout<<"InsertHelper "<<n->weight<< " to " << curr->weight <<" \n";

    if(n->weight > curr->weight) {
        if (curr->right == NULL) {
            curr->right = n;
        } else {
            insertHelper(n, curr->right);
        }
    }
    if(n->weight < curr->weight) {
        if (curr->left == NULL) {
            curr->left = n;
        } else {
            insertHelper(n, curr->left);
        }
    }
}

注意: 实际上,将接口(interface)更改为 Btree::insertOne( int n ) 会更好。然后您可以管理 BTree 中节点的生命周期

关于C++ 二叉树构建为什么这行不通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14767239/

相关文章:

c++ - 陷入无限循环

C++ bad_alloc 在内存位置异常

c++ - 从 stringstream 中提取到 2D vector 中

algorithm - 二叉树在x轴上的最大投影

java - 计算Java中二叉树中的叶节点

java - 在特定深度递归创建二叉树

data-structures - 二叉树的连接

c++ - 在 GLSL C++ 中将射线与三角形相交

C++ 自动与自动&

Java二叉树克隆问题