创建二叉搜索树

来源:互联网 发布:国内免费php空间 编辑:程序博客网 时间:2024/06/03 19:52

算法描述:
利用两根指针,*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);    }}