当前位置: 首页 > 知识库问答 >
问题:

用树枝粘住

盛琪
2023-03-14

我正在尝试进行树遍历。(按顺序、按顺序和后顺序)这是我的代码。

#include<stdio.h>
#include<stdlib.h>


struct node{
  int data;
  struct node* left;
  struct node* right;
};


void Insert(struct node* root,int item)
{
    struct node* parent;
    struct node* NewNode = (struct node*)malloc(sizeof(struct node));
    NewNode->left = NULL;
    NewNode->data = item;
    NewNode->right = NULL;

    if (root == NULL)
        root = NewNode;
    else
    {
        parent = root;
        while (1)
        {
            if (parent->data>item)
            {
                if(parent->left == NULL)
                {
                    parent->left = NewNode;
                    return;
                }
                parent = parent->left;

            }
            if (parent->data<item)
            {
                if(parent->right == NULL)
                {
                    parent->right = NewNode;
                    return;
                }
                parent = parent->right;
            }
        }

    }
}




void pre(struct node *newNode)
{
    if(newNode!=NULL)
    {
        printf("%d ",newNode->data);
        pre(newNode->left);
        pre(newNode->right);
    }
}

void in(struct node *newNode)
{
    if(newNode!=NULL)
    {
        in(newNode->left);
        printf("%d ",newNode->data);
        in(newNode->right);
    }
}


void post(struct node *newNode)
{
    if(newNode!=NULL)
    {
        post(newNode->left);
        post(newNode->right);
        printf("%d ",newNode->data);
    }
}


int main(void)
{
    int num,i;

    printf("\nHow many Numbers you wanna Enter in tree:\t");
    scanf("%d",&num);
    int numArr[num];
    printf("\nEnter the numbers: \n");
    struct node* root = NULL;
    for (i=0;i<num;i++)
    {
        scanf("%d",&numArr[i]);
        Insert(root,numArr[i]);
    }

    printf("\nPre order traversal is:\n");
    pre(root);
    printf("\nIn order traversal is:\n");
    in(root);
    printf("\nPost order traversal is:\n");
    post(root);
}

我认为我插入值有问题,因为当我运行代码时,输出只是空的。有人能解释一下我哪里出错了吗?

在插入函数m中,将根节点和要插入的项作为参数。

然后我使用malloc创建一个新节点。

将数据插入新节点时,左、右为空,因为左和右当前不指向任何节点。

然后检查根是否为空。 如果为空,则 m 将新节点分配给根节点。

如果root不为空。(我不应该松散根,所以我将根复制到父级并使用它。)

m检查数据是否小于根。如果它小于m,则向左移动到根的左边,如果根的左边为空,则插入新节点的地址,如果它不为空,则向左移动,直到它变为空。

如果数据大于root中的值,我会做同样的事情(只是向右)。

我的解释告诉我,我走在正确的道路上。但我的代码告诉我一个不同的故事。

共有1个答案

章翔宇
2023-03-14

这是正确答案感谢大家的帮助。

#include<stdio.h>
#include<stdlib.h>


struct node{
  int data;
  struct node* left;
  struct node* right;
};


void Insert(struct node** root,int item)
{
    struct node* parent;
    struct node* NewNode = (struct node*)malloc(sizeof(struct node));
    NewNode->left = NULL;
    NewNode->data = item;
    NewNode->right = NULL;

    if (*root == NULL)
        *root = NewNode;
    else
    {
        parent = *root;
        while (1)
        {
            if (parent->data>item)
            {
                if(parent->left == NULL)
                {
                    parent->left = NewNode;
                    return;
                }
                parent = parent->left;

            }
            if (parent->data<item)
            {
                if(parent->right == NULL)
                {
                    parent->right = NewNode;
                    return;
                }
                parent = parent->right;
            }
        }

    }
}




void pre(struct node *newNode)
{
    if(newNode!=NULL)
    {
        printf("%d ",newNode->data);
        pre(newNode->left);
        pre(newNode->right);
    }
}

void in(struct node *newNode)
{
    if(newNode!=NULL)
    {
        in(newNode->left);
        printf("%d ",newNode->data);
        in(newNode->right);
    }
}


void post(struct node *newNode)
{
    if(newNode!=NULL)
    {
        post(newNode->left);
        post(newNode->right);
        printf("%d ",newNode->data);
    }
}


int main(void)
{
    int num,i;

    printf("\nHow many Numbers you wanna Enter in tree:\t");
    scanf("%d",&num);
    int numArr[num];
    printf("\nEnter the numbers: \n");
    struct node* root = NULL;
    for (i=0;i<num;i++)
    {
        scanf("%d",&numArr[i]);
        Insert(&root,numArr[i]);
    }

    printf("\nPre order traversal is:\n");
    pre(root);
    printf("\nIn order traversal is:\n");
    in(root);
    printf("\nPost order traversal is:\n");
    post(root);
}
 类似资料:
  • 本文向大家介绍twig 什么是树枝?,包括了twig 什么是树枝?的使用技巧和注意事项,需要的朋友参考一下 示例 Twig是一种模板语言,可编译为优化的PHP代码。它主要用于输出HTML,但也可以用于输出任何其他基于文本的格式。它是一个独立组件,可以轻松集成到任何PHP项目中。 它提供了许多出色的功能: 自动转义HTML(有助于防止XSS) 考虑模板的语法设计(基于Django模板) 模板继承 巨

  • 我想为一个类似跳棋的游戏实现一个人工智能 我写了以下方法: -方法 这将返回所有按重量排序的有效移动的列表,其中重量是根据移动的类型和位置计算的 -方法 将移动应用于棋盘,如果有棋子被杀则返回1 -方法 以恢复板的先前状态。 这是一个零和游戏,所以人工智能应该最大化玩家颜色的棋子,最小化对手的棋子。 为此,最好的方法似乎是使用最小-最大和α-β修剪。这有以下伪码 但我还没有明白如何适应我的问题。有

  • 主要内容:决策树算法原理,决策树剪枝策略本节我们对决策算法原理做简单的解析,帮助您理清算法思路,温故而知新。 我们知道,决策树算法是一种树形分类结构,要通过这棵树实现样本分类,就要根据 if -else 原理设置判别条件。因此您可以这样理解,决策树是由许多 if -else 分枝组合而成的树形模型。 决策树算法原理 决策树特征属性是 if -else 判别条件的关键所在,我们可以把这些特征属性看成一个 集合,我们要选择的判别条件都来自于

  • 我正在尝试转换以下内容: 在细枝上,但它却抛出了错误 未捕获的异常: DateTime::__construct():未能解析时间字符串(26/03/2013)在位置0(2): /home/vagrant/Code/Phantom网站/供应商/twig/twig/lib/Twig/T中的意外字符emplate.php行218。 如果我通过这个: 它的工作原理,所以我想我需要改变一些与树枝日期格式相

  • 我试图设置一个细枝过滤器,其工作方式如下:{{entities | fieldnames}},该过滤器将返回一个包含实体对象的属性名称的数组。我的问题是,经过几个小时的阅读和尝试,我无法执行$this- 错误:对/Users/a77/Dropbox/06中的非对象调用成员函数get()。Proyectos/2011 U-Vox/DEV U-Vox/Uvox Web/src/Acme/DemoBun

  • 我在wordpress菜单屏幕选项中启用了菜单项描述,并为一些菜单项添加了描述。 有人知道我如何让它们显示在木材树枝模板中吗? 还有一个子问题:我假设在树枝部分之前,我需要给functions.php添加一些东西——每当我尝试一个解决方案,上面写着“把这个添加到你的functions.php”,然后我把它放入functions.php文件提供了木材入门主题,我得到的错误,大概我是粘贴在错误的点在该