【数据结构】二叉查找树
来源:互联网 发布:filter() 数组 编辑:程序博客网 时间:2024/05/22 00:20
二叉查找树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
树的节点定义如下:
#define keytype inttypedef struct BTreeNode{ struct BTreeNode* left; struct BTreeNode* right; struct BTreeNode* parent; keytype value;}node,*pnode;
二叉查找树的插入
pnode TreeInsert(pnode T,keytype k){ pnode z = (pnode)malloc(sizeof(node)); z->left = NULL; z->right = NULL; z->parent = NULL; z->value = k; pnode x = T; pnode y = NULL; while(x!=NULL) { y = x; if(k < x->value) x = x->left; else x = x->right; } z->parent = y; if(y==NULL) { T = z; } else { if(k < y->value) y->left = z; else y->right = z; } return T;}
二叉查找树的删除
二叉树节点的删除要考虑的三种情况:
1.如果要删除的节点没有子女,则直接删除
2.如果要删除的节点只有一个子女,将其子女链接到父节点
3.如果要删除的节点有两个子女,则删除其后继节点
pnode TreeMinimum(pnode x){ while(x->left != NULL) x = x->left; return x;}pnode TreeSuccessor(pnode x){ if(x->right != NULL) return TreeMinimum(x); pnode y = x->parent; while(y!=NULL && x==y->right) { x = y; y = y->parent; } return y;}pnode TreeDelete(pnode T,pnode z){ pnode x,y; if(z->left==NULL || z->right==NULL) y = z; else y = TreeSuccessor(z); if(y->left != NULL) x = y->left; else x = y->right; if(x != NULL) x->parent = y->parent; if(y->parent == NULL) T = x; else if(y == y->parent->left) y->parent->left = x; else y->parent->right = x; if(y != z) z->value = y->value; return y;}
0 0
- 数据结构:二叉查找树
- 数据结构--二叉查找树
- 【数据结构】二叉查找树
- 【数据结构】二叉查找树
- 数据结构---二叉查找树
- 【数据结构】二叉查找树
- 数据结构-二叉查找树
- 【数据结构】二叉查找树
- 数据结构--二叉查找树
- 【数据结构】二叉查找树
- 数据结构 二叉查找树
- 数据结构-二叉查找树
- 数据结构-查找二叉树
- 数据结构-- 二叉查找树
- 数据结构_二叉查找树
- 数据结构之二叉查找树
- 数据结构之二叉查找树
- 数据结构之查找二叉树
- ORACLE 错误 2304
- ContentProvider数据库共享之——概述
- java线程
- OC学习小结之Foudation -NSString
- #一周五# win10通用平台,无处不在的Xamarin,msbuild开源,MVP卢建晖的Asp.NET 5系列 (视频)
- 【数据结构】二叉查找树
- c++第一题20150321
- POJ 2370 Democracy in Danger
- [leetcode]Min Stack
- OpenGL入门10——颜色混合
- Next Permutation
- NSBundle mainBundle] pathForResource 返回nil的解决办法
- Android Layout inflater
- 求三个正整数中的最大数