#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *left;
struct node *right;
} node_t;
typedef struct tree {
struct node *root;
} tree_t;
node_t *alloc_one(int data) {
node_t *p = (node_t *)malloc(sizeof(node_t));
p->data = data;
p->left = NULL;
p->right = NULL;
return p;
}
// 方法1:
void insert_one(tree_t *t, int data) {
node_t *new = alloc_one(data);
if (t == NULL) {
t = new;
} else {
node_t *tmp = t->root;
while (tmp) {
if (data < tmp->data) {
if (tmp->left == NULL) {
tmp->left = new;
return;
} else {
tmp = tmp->left;
}
} else if (data > tmp->data) {
if (tmp->right == NULL) {
tmp->right = new;
return;
} else {
tmp = tmp->right;
}
}
}
}
}
// 方法2:递归法
node_t *insert_one2(node_t *t, int data) {
node_t *new = alloc_one(data);
if (t == NULL) {
t->root = new;
} else {
node_t *tmp = t->root;
if (data < tmp->data) {
if (tmp->left == NULL) {
tmp->left = new;
return tmp->left;
} else {
insert_one2(tmp->left, data);
}
} else {
if (tmp->right == NULL) {
tmp->right = new;
return tmp->right;
} else {
insert_one2(tmp->right, data);
}
}
}
return t;
}
void inOrder(struct node_t *root, int *res, int *resSize) {
if (!root) {
return;
}
inOrder(root->left, res, resSize);
res[(*resSize++)] = root->data;
inOrder(root->right, res, resSize);
}
int* inOrderTraverse(struct node_t *root, int *returnSize) {
int *res = malloc(sizeof(int) * 100);
*returnSize = 0;
inOrder(root, res, returnSize);
}
int main() {
int dataList[3] = {3, 5, 19};
int i;
tree_t *my_tree;
my_tree->root = NULL;
for(i = 0; i < sizeof(dataList)/sizeof(int); i++) {
insert_one(my_tree, i);
}
return 0;
}
两种方法C实现二叉树的创建和遍历
muahao@aliyun.com
推荐阅读
- TP5调用微信JSSDK 教程 - 测试成功案例
- 报错 dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib Referenced from
- 传统企业-全渠道营销解决方案-1
- 电话查询佛山居住证真伪——佛山市、区、镇(街)流管办(局)服务咨询电话一览表
- magento Too many arguments, expected arguments "command".
- restfull api交互常用状态码
- 七牛云 qshell 使用
- TP5调用微信JSSDK 教程 —— 之异步使用
- jQuery 方式模拟提交表单
- thinkphp 迁移数据库 -Phinx 简单说明文档