插入二叉树的元素(Inserting an element in Binary Tree)

2019-09-01 11:00发布

尝试探索了许多过网,但可以得到任何帮助,每到一处它像添加节点到二叉搜索树。

问:请求查找算法和代码段用于添加节点的二叉树 。 (或点我到正确的URL)

假设:按照我的理解, 二叉树二叉搜索树有什么不同? 纠正我,如果我错了。

(要求:如果你正在写的代码片段,请使用正确的变量名,在理解帮助)

如:二叉树

5 7 3 X1 X2 X3

                 5

          7               3

   x1       x2       x3       

二叉查找树5 7 3 2 4 6

                   5
          3               7

   2          4       6       





insert(int key, struct node **root)
{
    if( NULL == *root )`
    {
        *root = (struct node*) malloc( sizeof( struct node ) );`
        (*root)->data = key;
        (*root)->left = NULL;    
        (*root)->right = NULL;  
    }
    else if(key < (*root)->data)
    {
        insert( key, &(*root)->left );
    }
    else if(key > (*root)->data)
    {
        insert( key, &(*root)->right );
    }
}

Answer 1:

二叉树和二叉搜索树之间的区别是,虽然他们都有每个节点最多只能有2个节点的限制,二叉搜索树(BST)也必须有它的左子等于或更低的值和的它的右孩子必须大于或等于价值。 这就是为什么它被称为“搜索”的树,因为一切都数字排序,它有一个O(LOGN)的运行时间进行搜索。

因为没有身为BST的要求,一个二进制树可以被存储在一个载体(数组)。 当你插入载体你的水平,为了打造时尚的二叉树。 代码如下:

// typedef the node struct to NODE
// nodeVector similar to STL's vector class
insert(int key, NODE** nodeVector)
{
    NODE *newNode = (NODE*) malloc( sizeof( NODE ) );
    newNode->data = key;
    newNode->left = NULL;    
    newNode->right = NULL;

    // add newNode to end of vector
    int size = nodeVector->size();
    nodeVector->push_back(newNode);

    // if newNode is not root node
    if(nodeVector->size() > 1)
    {
        // set parent's child values
        Node* parent = (size/2)-1; // take advantage of integer division instead of using floor()
        if (parent->left == NULL)
        {
            parent->left = newNode;
        }
        else
        {
            parent->right = newNode;
        }
    }
}


Answer 2:

队列数据结构可以被用于在给二进制树插入元件中,由于在二叉树节点的顺序没有被维持,所以我们将尽快发现任何空插入的节点。 使用队列我们将遍历二叉树级别序遍历。

struct Treenode* temp;

Q = CreateQueue();
EnQueue(Q,root);

while(!IsEmptyQueue(Q))
{
    temp = DeQueue(Q);
    if(temp->left)
        EnQueue(Q,temp->left);
    else
    {
        temp->left=newNode;
        DeleteQueue(Q);
        return;
     }
     if(temp->right)
        EnQueue(Q,temp->right);
    else
    {
        temp->right=newNode;
        DeleteQueue(Q);
        return;
     }
}


Answer 3:

因为,我无法评论,我写这个。
二叉树插入功能上面的答案是错的。
假定为0,1,2,3,4,5中的序列传递给插入功能,
其生成树状

       0
      /
     1
      \ 
       2
      /
     3
      \
       4
      /
     5`<br/>

其中序遍历将1 3 5 4 2 0
而答案应该是

                     0
                   /  \
                  1    2 
                 / \  /  
                3   4 5


其中序遍历将3 1 4 0 5 2。



Answer 4:

因为我也面临同样的问题,我想出了以下过网解决方案: -

您可以使用队列存储当前节点,我们希望将新节点,我们在一级序遍历做什么,然后我们通过插入级别的节点级别。

以下链接可以帮助你: -

http://www.geeksforgeeks.org/linked-complete-binary-tree-its-creation/



Answer 5:

因为我没有必要的声誉,发表评论我张贴这是答案。 除了bagelboy所有其他人都误解了树或者二叉搜索树或完全二叉树。 现在的问题是简单的二进制树和Bagelboy的答案看起来是正确的。



文章来源: Inserting an element in Binary Tree