c - c中的二叉搜索树插入

标签 c

<分区>

BST 没有发生插入操作。会导致吗?-1 是数组中的空元素。 链表不适用于此代码。

void insert(int *Tree,int element)
{
    int temp=0;/* first subscript*/

    if(Tree[temp]==-1){

        Tree[temp]=element;
        return;
    }

    while(1){
        if((Tree[temp]>element))
            if (Tree[2*temp+1]==-1){
                Tree[2*temp+1]==element;
                break;
            }
            else
                temp=2*temp+1;

            else if(Tree[2*temp+2]==-1){
                Tree[2*temp+2]==element;
                break;
            }

            else
                temp=2*temp+2;
    }
}

最佳答案

修复缩进、添加大括号并替换用于赋值的 ==(应为 =),您的代码可以正常工作。仍然想添加一个检查以确保您没有超过 tree 的大小...

#include <stdio.h>

void insert(int *Tree,int element)
{
    int temp=0;/* first subscript*/

    if(Tree[temp]==-1){

        Tree[temp]=element;
        return;
    }

    while(1)
    {
        if((Tree[temp]>element))
        {
          if (Tree[2*temp+1]==-1)
          {
            Tree[2*temp+1]=element;
            break;
          }
          else
          {
            temp=2*temp+1;
          }
        }
        else
        {
          if(Tree[2*temp+2]==-1)
          {
            Tree[2*temp+2]=element;
            break;
          }
          else
          {
            temp=2*temp+2;
          }
        }
    }
}

int main(void) {
  int tree[100];
  int ii;
  for(ii=0;ii<100;ii++) tree[ii]=-1;
  insert(tree, 5);
  insert(tree, 3);
  insert(tree, 9);
  insert(tree, 4);
  for(ii=0; ii<10; ii++) printf("%d: %d\n", ii, tree[ii]);
}

我无法猜测这是否真的会产生您正在寻找的树。

关于c - c中的二叉搜索树插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22313348/

相关文章:

c - 可以使用 fscanf 读取直到 EOF 吗? C

c++ - 使用字符串作为指向其第一个字符的指针

c - scanf 未知数的整数,如何结束循环?

c - 我的 'append' 算法或代码有什么问题?

c - 关于 lea 指令的问题,IA32

c - C 中 do-while 循环的意外行为?

c - 有没有办法停止和恢复 C 程序

java - 计算 n^n 中的第一个和最后一个 k 数字

c - VS17 SSH Linux unistd.h

c - 无缘无故地脱离选择