malloc-关于c语言二叉树的问题,求大神解答,急

问题描述

关于c语言二叉树的问题,求大神解答,急

这是一段关于二叉树的代码。*list_from_tree这个函数是用来建立二叉树的,但我不太懂它是如何建立二叉树的,求大神详细解释。

#include
#include

typedef struct tnode Tnode;
struct tnode{
Tnode *left;
Tnode *right;

int data;

};

Tnode *new_tnode(int data);
void print_tree(Tnode *tree, int depth);
void free_tree(Tnode *tree);

typedef struct lnode Lnode;
struct lnode{
Lnode *next;
int data;
};

Lnode *new_node(int data);
void print_list(Lnode *list);
void free_list(Lnode *list);

Lnode *list_from_tree(Tnode *root, Lnode *list);

int main(int argc, char *argv[]){
Tnode *root = new_tnode(6);
root->left = new_tnode(5);
root->right = new_tnode(8);
root->right->left = new_tnode(7);
root->right->right = new_tnode(9);

Lnode *list = list_from_tree(root, NULL);

print_tree(root, 0);
printf("n");
print_list(list);

free_list(list);
free_tree(root);
return EXIT_SUCCESS;

}

Lnode *new_node(int data){
Lnode *new = malloc(sizeof(Lnode));
new->next = NULL;
new->data = data;
return new;
}

Tnode *new_tnode(int data){
Tnode *new = malloc(sizeof(Tnode));
new->left = NULL;
new->right = NULL;
new->data = data;
return new;
}

void print_tree(Tnode *tree, int depth){
if(tree != NULL){
printf("(");
print_tree(tree->left, depth+1);
if(tree->left == NULL){
printf("x");
}
printf("<-");
printf("%d", tree->data);
printf("->");
if(tree->right == NULL){
printf("x");
}
print_tree(tree->right, depth+1);
printf(")");
}
}

void print_list(Lnode *list){
Lnode *curr = list;
while(curr != NULL){
printf("%d -> ", curr->data);
curr = curr->next;
}
printf("xn");
}

void free_tree(Tnode *tree){
if(tree != NULL){
free_tree(tree->left);
free_tree(tree->right);
free(tree);
}
}

void free_list(Lnode *list){
Lnode *curr = list;
Lnode *tmp;
while(curr != NULL){
tmp = curr;
curr = curr->next;
free(tmp);
}
}

Lnode *list_from_tree(Tnode *root, Lnode *list){
if(root == NULL){
return list;
}

Lnode *right = list_from_tree(root->right, list);
Lnode *new = new_node(root->data);

new->next = right;

Lnode *left = list_from_tree(root->left, new);
return left;

}

解决方案

你理解错了,listfromtree是根据二叉树得到一个链表,不是构建二叉树。用的办法就是简单的递归,把找到的插入链表尾部。

解决方案二:

在结构体内建一个List,然后就灵活的运用指针来访问、遍历孩子节点,最后再外层加一些约束条件,大概就是这样,多看看C语言的指针,你就懂了吧

时间: 2024-11-02 07:27:24

malloc-关于c语言二叉树的问题,求大神解答,急的相关文章

c语言基础问题,求大神解答

问题描述 c语言基础问题,求大神解答 输入10个整数,使其各数顺序向后移动m个位置,如1.2.3.4.5.6.7.8.9.10移动后为7.8.9.10.1.2.3.4.5.6 解决方案 用循环,对1--8的数据向后移,0,9号数据单独考虑 解决方案二: 百度上有个算法,你试试效率怎么样 void Reverse(int *arr, int b, int e) { for(; b < e; b++, e--) { int temp = arr[e]; arr[e] = arr[b]; arr[b]

调用函数-一道C语言的题目,求大神解答

问题描述 一道C语言的题目,求大神解答 输入一个正整数,逐位分割该数的每一位数字,求由数字所构成的最大整数.例如:输入624891,得到最大整数:986421.要求定义和调用函数计算并返回一个x可构成的最大整数. 解决方案 #include #define N 20 int fun(int n) { int x,t,s[N]={0},i,j,len; for(len=0;x!=0;len++) { x=n/10; s[len]=n%10; n=x; } for(i=0;i<len-1;i++)

c语言问题-关于c语言的问题,求大神解答

问题描述 关于c语言的问题,求大神解答 为什么输出是1#3#21# 解决方案 这么简单..你自己循环3遍就看出来了.你认为该是什么结果?

C语言 神奇算式。求大神解答!!!

问题描述 C语言 神奇算式.求大神解答!!! 标题:神奇算式 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 解决方案 http://zhidao.baidu.com/link?url=auHsWuamEqBq75Cug4hLrZnoWupqp1H_DLpBxCwmcDJOc2xpCf7ekRWx_YuGqDPp-uuj84RKKPGWeFlPA_UK4BZihp7FBQx3

tomcat启动时出现如下问题 求大神解答 急急急!

问题描述 tomcat启动时出现如下问题 求大神解答 急急急! 解决方案 其实也看不懂,是不是端口被占用了.

jquery.mobile中的data-icon大小能调整吗? 求 大神解答 急

问题描述 jquery.mobile中的data-icon大小能调整吗? 求 大神解答 急 如题 急 !!! 附求方法 急急急 大神求解

微博API调用出错! 求大神解答 急!!在线等!!!!!!!!!

问题描述 HTTPStatus500-Handlerprocessingfailed;nestedexceptionisjava.lang.NoClassDefFoundError:Couldnotinitializeclassweibo4j.util.WeiboConfig调用微博API的时候出错!求大神解答!!!!!!!!!!!!!! 解决方案 解决方案二:你这个微博API应该有专门的文件夹存储的,不能用默认引用的方式,要专门引用那个专门的路径

malloc-c语言指针问题,求大神,新手。

问题描述 c语言指针问题,求大神,新手. #include #include #include struct Student { int age; char name[100]; float score; }; void Ininformation(int * IP_len, struct Student * IP_arr) { int i; for (i = 0; i < *IP_len; ++i) { printf("请输入%d个学生信息: ", *IP_len); prin

链表一直不太会,求大神解答(c语言)

问题描述 链表一直不太会,求大神解答(c语言) 这是我写的链表程序,然而编译都过不了,找不到错,很惭愧... 求大神解答 然后我还想知道我写的程序的基本思路是对的吗? #include #include typedef struct lnode Lnode; struct Lnode { int data; Lnode *next; } Lnode * makeNode(int data) { Lnode *new_node=(Lnode *)malloc(sizeof(Lnode)); if(