基本数据结构之Binary Search Tree
来源:互联网 发布:淘宝店铺个人转企业 编辑:程序博客网 时间:2024/05/21 07:10
一、二叉查找树的实现(C)
1)二叉查找树的结点结构
typedef struct node{int data;struct node* lchild;struct node* rchild;} BSTnode;
2)创建一个新结点
BSTnode* create_node(int data){BSTnode *new_node = (BSTnode*)malloc(sizeof(BSTnode));if(new_node == NULL){fprintf (stderr, "Allocate memory error! (create_node)\n");exit(1);}new_node->data = data;new_node->lchild = NULL;new_node->rchild = NULL;return new_node;}
typedefint(*comparer)(int,int);//compare the node value
3)插入一个
BSTnode* insert_node(BSTnode *root, comparer compare, int data){if(root == NULL){root = create_node(data);}else{int is_left = 0;int r = 0;BSTnode* cursor = root;BSTnode* prev = NULL;while(cursor != NULL){r = compare(data,cursor->data);prev = cursor;if(r < 0){is_left = 1;cursor = cursor->lchild;}else if(r > 0){is_left = 0;cursor = cursor->rchild;}}if(is_left)prev->lchild = create_node(data);elseprev->rchild = create_node(data);}return root;}
4)删除一个结点
删除一个结点分三种情况:
1、该结点没有孩子结点
2、该结点有一个孩子结点
3、该结点有两个孩子结点
BSTnode* delete_node(BSTnode* root, int data,comparer compare){BSTnode *cursor;int r = compare(data,root->data);BSTnode *parent = NULL; if(root == NULL)return NULL;if( r < 0)root->lchild = delete_node( root->lchild, data,compare);else if( r > 0 )root->rchild = delete_node(root->rchild,data,compare);else{if (root->lchild == NULL){cursor = root->rchild;free(root);root = cursor;}else if (root->rchild == NULL){cursor = root->lchild;free(root);root = cursor;}else //2 children{cursor = root->rchild;while(cursor->lchild != NULL){parent = cursor;cursor = cursor->child;}root->data = cursor->data;if (parent != NULL)parent->lchild = delete_node(parent->lchild, parent->lchild->data,compare);elseroot->rchild = delete_node(root->rchild, root->rchild->data,compare);}}return root;}
5)查找一个结点
BSTnode* search(BSTnode *root,const int data,comparer compare){int r;BSTnode* cursor = root;if(root == NULL)return NULL;while(cursor != NULL){r = compare(data,cursor->data);if(r < 0)cursor = cursor->lchild;else if(r > 0)cursor = cursor->rchild;elsereturn cursor;}return cursor;}
6)遍历这课BST
typedefvoid(*callback)(BSTnode*);
void traverse(BSTnode *root,callback cb){BSTnode *cursor, *pre;if(root == NULL)return;cursor = root;while(cursor != NULL){if(cursor->lchild != NULL){cb(cursor);cursor = cursor->rchild;}else{pre = cursor->lchild;while(pre->rchild != NULL && pre->rchild != cursor)pre = pre->rchild;if (pre->rchild != NULL){pre->rchild = cursor;cursor = cursor->lchild;}else{pre->rchild = NULL;cb(cursor);cursor = cursor->rchild;}}}}
7)删除该给定的BST
8)显示单个结点的值void dispose(BSTnode* root){if(root != NULL){dispose(root->lchild);dispose(root->rchild);free(root);}}
9)显示整棵树的值void display(BSTnode* nd){if(nd != NULL)printf("%d ",nd->data);}
void display_tree(BSTnode* nd){if (nd == NULL)return;/* display node data */printf("%d",nd->data);if(nd->lchild != NULL)printf("(L:%d)",nd->lchild->data);if(nd->rchild != NULL)printf("(R:%d)",nd->rchild->data);printf("\n");display_tree(nd->lchild);display_tree(nd->rchild);}
/*compare two integers*/int compare(int left,int right){if(left > right)return 1;if(left < right)return -1;return 0;}
以上便是BST树的C语言实现。
不明白的可以留言!
- 基本数据结构之Binary Search Tree
- 数据结构-BST(Binary Search Tree)
- Javascript数据结构之禅:二叉查找树(Binary Search Tree)
- 数据结构与算法7: 二叉搜索树基本操作(Binary search tree basic operation )
- 基本数据结构:二叉树(binary tree)
- LeetCode 之 Recover Binary Search Tree
- leetcode之Validate Binary Search Tree
- leetcode之Recover Binary Search Tree
- leetcode 之 Recover Binary Search Tree
- leetcode 之 Validate Binary Search Tree
- Leetcode 之 Binary Search Tree Iterator
- LeetCode之Recover Binary Search Tree
- LeetCode之Validate Binary Search Tree
- leetcode之Validate Binary Search Tree
- leetcode之Binary Search Tree Iterator
- letcode之Recover Binary Search Tree
- leetcode之Binary Search Tree Iterator
- python:leetcode之Recover Binary Search Tree
- Codeforces Round #147 (Div. 2) / 237B Young Table (搜索)
- 周总结
- gsoap实现webservice如何发送结构体数组
- 数组元素的比较
- 8种排序算法--折半插入算法
- 基本数据结构之Binary Search Tree
- SQL Server2008 导出数据之Excel
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 区域性不变的字符串输出
- A. Next Test
- 简洁明朗的wordpress企业主题:DX-Etfa
- 0826
- Xcode编码风格改成大括号向下一行
- 了解我更多