二叉树实现C++

Cof*_*ing 3 c++ tree binary-tree function insert

我一直在尝试用C++实现二进制搜索树以获得乐趣.我的问题是我的插入功能有问题.以下是我到目前为止:

class TreeNode{

public: 
    int data;          
    TreeNode *left;    
    TreeNode *right;  
    void Insert(int value, TreeNode *x);
    void TreeNode::Print(TreeNode *x);
    TreeNode();
};


TreeNode::TreeNode(){

left = NULL;
right = NULL;

}
Run Code Online (Sandbox Code Playgroud)

.

void TreeNode::Insert(int value, TreeNode *x){

    if(x->left == NULL && x->right == NULL){
           TreeNode *tree = new TreeNode();                        
           tree->datavalue;                               
           x->left = tree;                                  
    }

    else if(x->left == NULL && x->right != NULL){

           TreeNode *tree = new TreeNode();                
           tree->data = value;                          
           x->left = tree;                                 
    }

    else if(x->left != NULL && x->right == NULL){

           TreeNode *tree = new TreeNode();                      
           tree->data = value;                            
           x->right = tree;                          
    }

    else if(x->left != NULL && x->right != NULL){

        ??????

    }

}
Run Code Online (Sandbox Code Playgroud)

Jus*_*son 5

您不应盲目插入,请遵循以下逻辑.如果x.value小于根值,则尝试向左插入.如果x.value> = root.value,请转到右侧.重复此逻辑,直到您达到NULL值.这将是插入元素的适当位置.

你可以翻转逻辑,我只是​​在左边选择<因为不到有点向左箭头.< - :P

TreeNode *root = this;
TreeNode *parent = root;
//Traverse the tree, go left if x.val < , else go right(>=)
while(root) {
    parent = root;
    root = (root->value > x.value) ? root->left : root->right;
}
if(parent->value > x->value) 
    parent->left = x;
else
    parent->right = x;
Run Code Online (Sandbox Code Playgroud)

如果您不关心订购,请使用队列进行深度优先搜索.

queue<TreeNode*> nodes;
nodes.push(this);
while(1)
{
    if(!nodes.front()->left)
    {
        nodes.front()->left = x;
        return;
    } 
    else if (!nodes.front()->right)
    {
        nodes.front()->right = x;
        return;
    }
    nodes.push(nodes.front()->left);
    nodes.push(nodes.front()->right);
    nodes.pop();
}
Run Code Online (Sandbox Code Playgroud)

  • OP问题的第一行是"我一直在尝试用C++实现二进制搜索树以获得乐趣." 但他在他的代码中发布的逻辑与他相矛盾. (3认同)