标签:right BST 二叉 else 查找 排序 data 节点 left
什么是二叉排序树
查找指定节点(二分查找)
public static Position Find(ElementType X, TreeNode BST) {
while (BST) {
if (X < BST -> data) {
BST = BST -> left;
} else if (X > BST -> data) {
BST = BST -> right;
} else return BST;
}
return NULL;
}
- 找最大元素和最小元素同理,查找效率取决于树的高度
插入指定节点
public static TreeNode Insert(ElementType X, TreeNode BST) {
if (!BST) {
BST = new TreeNode();
BST -> data = X;
BST -> left = NULL;
BST -> right = NULL;
} else {
if (X > BST -> data) {
BST -> right = Insert(X, BST -> right);
}
if (X < BST -> data) {
BST -> left = Insert(X, BST -> left);
}
}
return BST;
}
- 插入节点插在叶子那一层
删除指定节点
- 情况一:删除节点为叶节点,直接删除
- 情况二:删除节点有一个孩子节点,然他的父节点直接连接他的孩子节点
- 情况三:删除节点有左右孩子节点,取左子树最大或右子树最小代替(因为他们一定没有两个儿子节点),所以找到它之后就可以按情况二的方式删除
public static TreeNode Delete(ElementType X, TreeNode BST) {
TreeNode tmp;
if (!BST) {
System.out.println("没有匹配的节点");
} else if (X < BST -> data) {
BST -> left = Delete(X, BST -> left);
} else if (X > BST -> data) {
BST -> right = Delete(X, BST -> right);
} else {
if (BST -> right && BST -> left) {
tmp = FindMin(BST -> right);
BST -> data = tmp -> data;
BST -> right = Delete(X, BST -> right);
} else {
tmp = BST;
if (!BST -> left) {
BST = BST -> right;
} else if (!BST -> right) {
BST = BST -> left;
}
free(tmp);
}
}
}
标签:right,BST,二叉,else,查找,排序,data,节点,left 来源: https://www.cnblogs.com/hhc55/p/15327276.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。