C语言指针实现简单二叉排序树

来源:互联网 发布:用淘宝联盟赚钱安全吗 编辑:程序博客网 时间:2024/06/05 11:00

二叉排序树排序规则: 左节点 <= 根节点 <= 右节点

树节点:

typedef struct _node{    int data;    struct _node *leftChild;    struct _node *rightChild;}TreeNode;

操作:

//按照存储规则插入节点void insertNode(TreeNode **root, int data){    TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode));    node->data = data;    node->leftChild = NULL;    node->rightChild = NULL;    //1.树为空    //2.树不为空    if (*root == NULL)    {        *root = node;    }    else    {        TreeNode *current = *root;        while (1)        {            if (current->data >= data)            {                if (current->leftChild == NULL)                {                    current->leftChild = node;                    break;                }                else current = current->leftChild;            }            else            {                if (current->rightChild == NULL)                {                    current->rightChild = node;                    break;                }                else current = current->rightChild;            }        }    }}//中序遍历:左->根->右,按照从小到大顺序输出树void inOrder(TreeNode *node){    if(node != NULL)    {        inOrder(node->leftChild);        printf("%d ",node->data);        inOrder(node->rightChild);    }}void endl(){    printf("\n");}//按照后序遍历(PostOrder)(左->右->根)的顺序释放节点内存void freeAll(TreeNode *node){    if(node->leftChild != NULL) freeAll(node->leftChild);    if(node->rightChild != NULL) freeAll(node->rightChild);    free(node);}int main(){    TreeNode *rootNode = NULL;    insertNode(&rootNode, 1);    insertNode(&rootNode, 2);    insertNode(&rootNode, 3);    insertNode(&rootNode, 2);    insertNode(&rootNode, 3);    insertNode(&rootNode, 98);    insertNode(&rootNode, 13);    inOrder(rootNode);    endl();    insertNode(&rootNode, 6);    insertNode(&rootNode, 13);    insertNode(&rootNode, 6);    insertNode(&rootNode, 54);    insertNode(&rootNode, 44);    inOrder(rootNode);    endl();    freeAll(rootNode);    return 0;}

小结:由于二叉排序树的规则,插入的节点保证严格有序,节点查找的时间复杂度在O(Log2N)~O(N)之间,故整体排序的时间复杂度在O(NLog2N)~O(N^2)之间

原创粉丝点击