算法描述:
利用两根指针,*pa和*son,
pa指向son的前一个节点,作为son的双亲节点
每次循环son从根节点开始,
如果son的数据域比新建节点数据域大则son=son->left
反之,son=son->right,
直到son指向空为止,
此时pa指针指向的节点就是新节点的双亲节点
判断pa的数据域和p的数据域,进行挂叶子节点
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *left;
struct node *right;
}BTNode;
BTNode* binSortTree(int data[], int len)
{
BTNode *root = NULL, *p = NULL, *pa = NULL, *c = NULL;
for (int i = 0; i < len; i++){
p = (BTNode*)malloc(sizeof(BTNode));
p->data = data[i];
p->left = p->right = NULL;
if (!root){
root = p;
}
else{
c = root;
while (c){
pa = c;
if (p->data < c->data){
c = c->left;
}
else{
c = c->right;
}
}
if (pa->data < p->data){
pa->right = p;
}
else{
pa->left = p;
}
}
}
return root;
}
void print(BTNode *root)
{
if (root){
print(root->left);
printf("%5d", root->data);
print(root->right);
}
}