标题:二叉树的问题
只看楼主
bobbob
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-4-13
结帖率:100%
已结贴  问题点数:20 回复次数:6 
二叉树的问题
本来应该输出十个数,结果就输出了 0 5 6 帮看一下哪里有错,谢谢
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct tree tree;

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

tree *tree_add(tree *root,int num)
{
    if(root == NULL)
    {
        root=malloc(sizeof(tree));
        root->data = num;
        root->left = root->right = NULL;
        return root;
    }
    else if(root->data < num)       

        root->right = tree_add(root->right,num);
    else if(root->data > num)
        root->left = tree_add(root->left,num);
    else
        return root;
}

int print_tree(tree *p)
{
    if(p->left != NULL)
        print_tree(p->left);
    printf("%d\n",p->data);
    if(p->right != NULL)
        print_tree(p->right);
}

int main()
{
    tree *root;
    int num[10]={5,0,4,7,8,3,2,1,6};
    for(int i=0;i<10;i++)
        if(root == NULL)
            root=tree_add(root,num[i]);
        else

            tree_add(root,num[i]);
    print_tree(root);
}

搜索更多相关主题的帖子: left tree num NULL int 
2020-04-13 15:41
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:20 
tree_add递归的时候没有返回值,你编译器应该有警告吧!
程序代码:
tree *tree_add(tree *root, int num)
{
    if (root == NULL)
    {
        root = (tree *)malloc(sizeof(tree));
        root->data = num;
        root->left = root->right = NULL;
        return root;
    }
    else if (root->data < num)

         root->right = tree_add(root->right, num);
    else if (root->data > num)
         root->left = tree_add(root->left, num);
    return root;
}
2020-04-13 17:19
bobbob
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-4-13
得分:0 
回复 2楼 fulltimelink
不是这个原因,我给两个 else if 加上返回值,输出仍然只是0 5 6
2020-04-13 17:59
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:0 
回复 3楼 bobbob
这是我测试的代码,是OK的!
程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct tree tree;

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

tree *tree_add(tree *root, int num)
{
    if (root == NULL)
    {
        root = (tree *)malloc(sizeof(tree));
        root->data = num;
        root->left = root->right = NULL;
        return root;
    }
    else if (root->data < num)

         root->right = tree_add(root->right, num);
    else if (root->data > num)
         root->left = tree_add(root->left, num);
    return root;
}

void print_tree(tree *p)
{
    if (p->left != NULL)
        print_tree(p->left);
    printf("%d\n", p->data);
    if (p->right != NULL)
        print_tree(p->right);
}


void freeList(tree* head)
{
    if (NULL != head) {
        tree *left = head->left;
        tree *right = head->right;
        tree * tmpL;
        tree * tmpR;
        while ( NULL != left)
        {
            tmpL = left;
            left = left->left;
            free(tmpL);
        }
        while (NULL != right)
        {
            tmpR = right;
            right = right->right;
            free(tmpR);
        }
    }
    


    

}
int main()
{
    tree *root = NULL;
    int num[10] = { 5,0,4,7,8,3,2,1,6 };
    for (int i = 0; i < 10; i++)
        if (root == NULL)
            root = tree_add(root, num[i]);
        else
            tree_add(root, num[i]);
    print_tree(root);
    freeList(root);
}

2020-04-13 18:04
bobbob
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-4-13
得分:0 
回复 4楼 fulltimelink
喔槽,为啥把那个 else 去掉就行了呀?想不通
2020-04-13 18:40
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:0 
回复 5楼 bobbob
不去掉else 只有首次为null以及添加的值 和 root的值 相同的时候才会返回,那两个if 和 elseif 只是执行,并没有返回root指针
你可以给if和elseif代码块加上大括号再理解 一下。
2020-04-13 18:46
bobbob
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-4-13
得分:0 
回复 6楼 fulltimelink
谢谢
2020-04-14 09:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501020-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083765 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved