欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 手动实现二叉搜索树

手动实现二叉搜索树

2025/5/1 7:13:50 来源:https://blog.csdn.net/Z2076465172/article/details/147636334  浏览:    关键词:手动实现二叉搜索树

前言

提前祝大家五一快乐~~,基础的数据结构接近尾声了,我模拟实现了一个 二叉搜索树,分享给大家,希望可以帮助到有需要的人。

思维导图(思路)

代码 

package demo1;public class BinarySearchTree {static class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val = val;}}public TreeNode root ;//别忘记这个啦public void insert(int key) {if(root==null){root=new TreeNode(key);return;}TreeNode cur=root;TreeNode parent=null;TreeNode node=new TreeNode(key);while(cur!=null){if(cur.val>key){parent=cur;cur=cur.left;}else if(cur.val<key){parent=cur;cur=cur.right;}else{//因为不能插入相同的return;}}//走到这里,parent.val一定不会等于key的if(parent.val>key){parent.left=node;}else {parent.right=node;}}/*** 时间复杂度:*        最好情况: O(logN)*        最坏情况: O(N)* @param key* @return*/public TreeNode search(int key) {TreeNode cur=root;while(cur!=null){if(cur.val<key){cur=cur.right;}else if(cur.val>key){cur=cur.left;}else{return cur;}}return null;}public void remove(int key) {if(root==null){return;}TreeNode parent=null;TreeNode cur=root;while(cur!=null){if(cur.val>key){parent=cur;cur=cur.left;}else if(cur.val<key){parent=cur;cur=cur.right;}else{removeNode(parent,cur);//别搞忘写returnreturn;}}}private void removeNode(TreeNode parent, TreeNode cur) {if(cur.left==null){if(cur==root){root=cur.right;}else if(parent.right==cur){parent.right=cur.right;}else{parent.left=cur.right;}}else if(cur.right==null){if(cur==root){root=cur.left;}else if(parent.right==cur){parent.right=cur.left;}else{parent.left=cur.left;}}else{TreeNode tp=cur;TreeNode t=cur.right;while(t.left!=null){tp=t;t=t.left;}cur.val=t.val;if(tp.left==t){tp.left=t.right;}else{tp.right=t.right;}}}
}

结语 

下次见~~,祝大家五一快乐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词