内容来自zvvq,别采集哟
介绍 zvvq好,好zvvq
二叉搜索树 (bst) 是一种二叉树,其中每个节点最多有2个子节点,称为左子节点和右子节点。针对每个节点,左子树仅包含值小于该节点值的节点,右子树仅包含值大于该节点值的节点。 bst 用以高效的检索、插进和删除操作。为什么使用二叉搜索树? zvvq
bst 几个优势:高效搜索:检索、插进、删掉均值时间复杂度为o(log n)。
内容来自samhan
动态项目集:适用动态操作,与静态数组不同。
有序原素:bst 的中序遍历会产生按排列次序排列元素。
搭建 bst 的逐层手册 内容来自samhan666
步骤一:界定节点构造
第一步是界定树中节点构造。每个节点将具有三个特性:一个值、对左子节点的引入与对右子节点的引入。 内容来自zvvq
11 zvvq.cn
publicclasstreenode{ 本文来自zvvq
intvalue; 内容来自zvvq,别采集哟
treenodeleft;
内容来自samhan
treenoderight; copyright zvvq
treenode(intvalue){ zvvq好,好zvvq
this.value=value;
zvvq好,好zvvq
this.left=null;
copyright zvvq
this.right=null; 内容来自zvvq,别采集哟
} 内容来自zvvq,别采集哟
} zvvq.cn
第2步:应用构造函数建立bst类
下面,大家建立 bst 类,其中包括对树杆的引入及其插进元素方式。 内容来自samhan
publicclassbinarysearchtree{
treenoderoot; zvvq.cn
publicbinarysearchtree(){ 内容来自samhan666
this.root=null;
本文来自zvvq
}
内容来自samhan
} zvvq
第三步:完成插入方法 本文来自zvvq
要把原素插进 bst,大家需要找到新节点的正确位置。插入方法一般完成为递归函数。 本文来自zvvq
publicvoidinsert(intvalue){
root=insertrec(root,value); 本文来自zvvq
} 本文来自zvvq
privatetreenodeinsertrec(treenoderoot,intvalue){ copyright zvvq
//basecase:ifthetreeisempty,returnanewnode 内容来自samhan666
if(root==null){ copyright zvvq
root=newtreenode(value); 内容来自zvvq
returnroot;
}
zvvq
//otherwise,recurdownthetree 内容来自zvvq,别采集哟
if(valueroot.value){ zvvq.cn
root.right=insertrec(root.right,value); 内容来自samhan
}
copyright zvvq
//returnthe(unchanged)nodepointer
内容来自zvvq,别采集哟
returnroot; 内容来自zvvq
}
可视化
为了更好地了解插进是如何工作的,使我们考虑一个例子。假定我们要在 bst 中插进下列数字序列:50, 30, 70, 20, 40, 60, 80。
50 copyright zvvq
/ zvvq
30
copyright zvvq
50
zvvq
/ zvvq
3070
50 内容来自zvvq,别采集哟
/ copyright zvvq
3070
zvvq好,好zvvq
/ 内容来自samhan
插进40: 内容来自samhan
50
/ 内容来自samhan
3070
/ 本文来自zvvq
插进60
50
/
copyright zvvq
3070 copyright zvvq
// zvvq.cn
插进80:
copyright zvvq
50
zvvq好,好zvvq
/
3070
// copyright zvvq
详细编码 zvvq好,好zvvq
这是建立 bst 和插进元素详细编码: copyright zvvq
publicclassBinarySearchTree{ 内容来自samhan666
TreeNoderoot; zvvq.cn
publicBinarySearchTree(){
内容来自zvvq
this.root=null;
内容来自zvvq,别采集哟
} zvvq.cn
publicvoidinsert(intvalue){ zvvq好,好zvvq
root=insertRec(root,value);
} 内容来自samhan
privateTreeNodeinsertRec(TreeNoderoot,intvalue){ zvvq好,好zvvq
if(root==null){
zvvq.cn
root=newTreeNode(value);
returnroot; zvvq.cn
}
if(valueroot.value){ zvvq好,好zvvq
root.right=insertRec(root.right,value); 内容来自samhan
}
returnroot; 内容来自samhan666
}
//Additionalmethodsfortraversal,search,anddeletecanbeaddedhere zvvq好,好zvvq
publicstaticvoidmain(String[]args){ 本文来自zvvq
BinarySearchTree bst =newBinarySearchTree();
int[]values={50, 30, 70, 20, 40, 60, 80}; zvvq好,好zvvq
for(intvalue:values){ 本文来自zvvq
bst.insert(value);
zvvq.cn
} 内容来自samhan666
//Addcodetoprintortraversethetree
} 内容来自samhan666
}
zvvq
classTreeNode{
intvalue;
TreeNodeleft;
zvvq好,好zvvq
TreeNoderight; 内容来自zvvq,别采集哟
TreeNode(intvalue){ 内容来自samhan
this.value=value; 本文来自zvvq
this.left=null;
this.right=null; 内容来自samhan666
}
内容来自samhan666
} 内容来自samhan666
以上就是Java 中重新开始的二叉搜索树的详细内容,大量请关注其他类似文章! 内容来自zvvq