二叉树的创建,增加,前序遍历
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>typedef int data_t;
typedef struct _node
{data_t data;struct _node* left;struct _node* right;
}node_t;int bst_create(node_t**, data_t);//函数声明BST创建
int bst_add(node_t**, data_t);//函数声明结点增加
void bst_preorder(node_t* root);int bst_create(node_t **root, data_t data)
{node_t* pnew = (node_t*)malloc(sizeof(node_t));if (pnew == NULL)return -1;pnew->data = data;pnew->left = pnew->right = NULL;*root = pnew;return 0;
}int bst_add(node_t** root, data_t data)
{node_t* pnew = (node_t*)malloc(sizeof(node_t));if (pnew == NULL)return -1;pnew->data = data;pnew->left = pnew->right = NULL;// 如果树为空,创建根节点if (*root == NULL){return bst_create(root, data);}node_t* p = *root, * parent = NULL;while (p){parent = p;if (data < p->data)p = p->left;elsep = p->right;}if (data < parent->data)parent->left = pnew;elseparent->right = pnew;return 0;}
//前序遍历,根左右
void bst_preorder(node_t* root)
{if (root == NULL)return;printf("%3d", root->data);bst_preorder(root ->left);bst_preorder(root->right);
}int main()
{node_t* root = NULL;srand(time(NULL));for (int i = 0; i < 10; i++){int data = rand() % 100;bst_add(&root, data);printf("%3d", data);}printf("\n");puts("=====前序遍历====");bst_preorder(root);printf("\n");puts("================="); return 0;}
运行结果: