zvvq技术分享网

Java 中从头开始的二叉搜索树(二叉树路径求和

作者:zvvq博客网
导读简介 二叉搜索树 (bst) 是一种二叉树,其中每个节点最多有两个子节点,称为左子节点和右子节点。对于每个节点,左子树仅包含值小于该节点值的节点,右子树仅包含值大于该节点值

内容来自zvvq,别采集哟

介绍 zvvq好,好zvvq

二叉搜索树 (bst) 是一种二叉树,其中每个节点最多有2个子节点,称为左子节点和右子节点。针对每个节点,左子树仅包含值小于该节点值的节点,右子树仅包含值大于该节点值的节点。 bst 用以高效的检索、插进和删除操作。为什么使用二叉搜索树? zvvq

bst 几个优势:高效搜索:检索、插进、删掉均值时间复杂度为o(log n)。

内容来自samhan

动态项目集:适用动态操作,与静态数组不同。

zvvq好,好zvvq

有序原素:bst 的中序遍历会产生按排列次序排列元素。

内容来自samhan666

搭建 bst 的逐层手册 内容来自samhan666

步骤一:界定节点构造

zvvq

第一步是界定树中节点构造。每个节点将具有三个特性:一个值、对左子节点的引入与对右子节点的引入。 内容来自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类

zvvq.cn

下面,大家建立 bst 类,其中包括对树杆的引入及其插进元素方式。 内容来自samhan

publicclassbinarysearchtree{

内容来自samhan666

treenoderoot; zvvq.cn

publicbinarysearchtree(){ 内容来自samhan666

this.root=null;

本文来自zvvq

}

内容来自samhan

} zvvq

第三步:完成插入方法 本文来自zvvq

要把原素插进 bst,大家需要找到新节点的正确位置。插入方法一般完成为递归函数。 本文来自zvvq

publicvoidinsert(intvalue){

zvvq

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

}

zvvq

//otherwise,recurdownthetree 内容来自zvvq,别采集哟

if(valueroot.value){ zvvq.cn

root.right=insertrec(root.right,value); 内容来自samhan

}

copyright zvvq

//returnthe(unchanged)nodepointer

内容来自zvvq,别采集哟

returnroot; 内容来自zvvq

}

内容来自zvvq

可视化

内容来自zvvq,别采集哟

为了更好地了解插进是如何工作的,使我们考虑一个例子。假定我们要在 bst 中插进下列数字序列:50, 30, 70, 20, 40, 60, 80。

copyright zvvq

50 copyright zvvq

/ zvvq

30

copyright zvvq

50

zvvq

/ zvvq

3070

内容来自zvvq

内容来自samhan

50 内容来自zvvq,别采集哟

/ copyright zvvq

3070

zvvq好,好zvvq

/ 内容来自samhan

插进40: 内容来自samhan

50

内容来自samhan666

/ 内容来自samhan

3070

zvvq好,好zvvq

/ 本文来自zvvq

插进60

内容来自zvvq

50

内容来自zvvq

/

copyright zvvq

3070 copyright zvvq

// zvvq.cn

插进80:

copyright zvvq

50

zvvq好,好zvvq

/

本文来自zvvq

3070

zvvq.cn

// 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);

zvvq

} 内容来自samhan

privateTreeNodeinsertRec(TreeNoderoot,intvalue){ zvvq好,好zvvq

if(root==null){

zvvq.cn

root=newTreeNode(value);

内容来自samhan666

returnroot; zvvq.cn

}

zvvq好,好zvvq

if(valueroot.value){ zvvq好,好zvvq

root.right=insertRec(root.right,value); 内容来自samhan

}

内容来自samhan

returnroot; 内容来自samhan666

}

内容来自samhan666

//Additionalmethodsfortraversal,search,anddeletecanbeaddedhere zvvq好,好zvvq

publicstaticvoidmain(String[]args){ 本文来自zvvq

BinarySearchTree bst =newBinarySearchTree();

内容来自samhan666

int[]values={50, 30, 70, 20, 40, 60, 80}; zvvq好,好zvvq

for(intvalue:values){ 本文来自zvvq

bst.insert(value);

zvvq.cn

} 内容来自samhan666

//Addcodetoprintortraversethetree

copyright zvvq

} 内容来自samhan666

}

zvvq

classTreeNode{

zvvq好,好zvvq

intvalue;

内容来自zvvq

TreeNodeleft;

zvvq好,好zvvq

TreeNoderight; 内容来自zvvq,别采集哟

TreeNode(intvalue){ 内容来自samhan

this.value=value; 本文来自zvvq

this.left=null;

zvvq

this.right=null; 内容来自samhan666

}

内容来自samhan666

} 内容来自samhan666

以上就是Java 中重新开始的二叉搜索树的详细内容,大量请关注其他类似文章! 内容来自zvvq