1. 程式人生 > >C語言指標實現簡單二叉排序樹

C語言指標實現簡單二叉排序樹

二叉排序樹排序規則: 左節點 <= 根節點 <= 右節點

樹節點:

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)之間