当前位置: 首页 > news >正文

北京免费建站网络营销网络服务部工作计划

北京免费建站网络营销,网络服务部工作计划,wordpress 注入 实战,模具钢东莞网站建设目录 1.概念 2.性质 3.二叉搜索树的操作 1.查找 2.插入 3.删除(难点) 1.概念 二叉搜索树又称二叉排序树.利用中序遍历它就是一个有顺序的一组数. 2.性质 1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 2.若它的右子树不为空,则右子树上所有节点的值都…

目录

1.概念

2.性质

 3.二叉搜索树的操作

1.查找

2.插入

3.删除(难点)

1.概念

二叉搜索树又称二叉排序树.利用中序遍历它就是一个有顺序的一组数.

2.性质

1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值

2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值

3.它的左右子树也分别为二叉搜索树

 3.二叉搜索树的操作

1.查找

根据搜索树的性质来进行查找操作.

/*** 查找* @param root* @param val*/public TreeNode find(TreeNode root, int val) throws FindException{if (root == null) {throw new FindException("root 为空");}while (root != null) {if (root.val == val) {return root;} else if (root.val < val) {root = root.right;} else {root = root.left;}}return null;}

2.插入

每次插入进去的值都在叶子节点.

如果插入的是相同的数那么直接return. (在搜索树中插入相同的数没有意义)

/*** 插入* @param root* @param val* @return*/public TreeNode insert(TreeNode root, int val) {if (root == null) {root = new TreeNode(val);return root;}TreeNode cur = root;TreeNode parent = null;while (cur != null) {parent = cur;if (cur.val < val) {cur = cur.right;} else {cur = cur.left;}}if (parent.val < val) {parent.right = new TreeNode(val);} else {parent.left = new TreeNode(val);}return root;}

3.删除(难点)

对于删除我们要去判断3种情况 : 假设要删除的节点是cur

一 . cur.left == null 在这个前提下 还有三种情况:

      1 . cur 是 root , root = cur.right;

      2 . cur不是root, cur是parent.left ; parent.left = cur.right;

      3 . cur不是root,  cur是parent.right; parent.right = cur.right;

 

二 .   cur.right == null 在这个前提下 还有三种情况:

      1 . cur 是 root , root = cur.left;

      2 . cur不是root, cur是parent.left ; parent.left = cur.left;

      3 . cur不是root,  cur是parent.right; parent.right = cur.left;

 

三 (重).  cur 的左右都不为空 : 

 

思路 : 假设要被删除的是cur , 我们去找到cur右树中最小的那个节点 . 把它的val值跟cur.val交换.

交换之后我们的任务就是去删除交换后的那个节点(之前右树中最小的值).

但是这样做的话还有一个问题 : 在我们去删被交换后的那个节点时,它的左子树肯定是空的.

比如是这样 : 

第一种情况 : 

 

第二种情况 : 

 

 结合以上两种情况 : 我们就要去判断parent.left == del  还是  parent.right = del

代码实现  : 

public class BinarySearchTree {static class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val = val;}}/*** 查找* @param root* @param val*/public TreeNode find(TreeNode root, int val) throws FindException{if (root == null) {throw new FindException("root 为空");}while (root != null) {if (root.val == val) {return root;} else if (root.val < val) {root = root.right;} else {root = root.left;}}return null;}/*** 插入* @param root* @param val* @return*/public TreeNode insert(TreeNode root, int val) {if (root == null) {root = new TreeNode(val);return root;}TreeNode cur = root;TreeNode parent = null;while (cur != null) {parent = cur;if (cur.val < val) {cur = cur.right;} else {cur = cur.left;}}if (parent.val < val) {parent.right = new TreeNode(val);} else {parent.left = new TreeNode(val);}return root;}//中序遍历public void inorder(TreeNode root) {if (root == null) {return;}inorder(root.left);System.out.print(root.val + " ");inorder(root.right);}/*** 删除* @param root* @param val*/public void remove(TreeNode root, int val) {TreeNode cur = root;if (cur == null) {throw new RootNullException("root 为空");}TreeNode parent = null;while (cur != null) {if (cur.val == val) {del(cur,parent,root);break;} else if (cur.val < val) {parent = cur;cur = cur.right;} else {parent = cur;cur = cur.left;}}}//删除cur节点public void del(TreeNode cur, TreeNode parent, TreeNode root) {if (cur.left == null) {if (cur == root) {root = root.right;} else if (parent.right == cur) {parent.right = cur.right;} else {parent.left = cur.right;}} else if (cur.right == null) {if (cur == root) {root = root.left;} else if (parent.right == cur) {parent.right = cur.left;} else {parent.left = cur.left;}} else {//程序到这 就是cur的左右都不为空TreeNode del = cur.right;parent = cur;while (del.left != null) {parent = del;del = del.left;}cur.val = del.val;if (parent.right == del) {parent.right = del.right;} else {parent.left = del.right;}}}
}

以上就是关于搜索树的一些基本操作.

有任何问题可以私信我!

http://www.yayakq.cn/news/358539/

相关文章:

  • 做网站找客源线上营销推广方式
  • 上海手机网站建设报价表百度一下首页设为主页
  • wordpress把站wordpress搬家问号
  • 导航网站cms怎么优化自己网站
  • 个性化网站网站页面设计流程
  • 深圳价格实惠的网站建设公司做企业网站服务器在国外
  • 优秀单页网站网站根据城市做二级目录
  • 只用html5可以做网站吗内网网站开发报价
  • 关键字搜索网站怎么做微软网页制作工具
  • 西域数码网站建设中国煤炭建设协会网站qc
  • 通化建设工程信息网站商务网站建设是什么
  • wordpress全站网站建设需要注意事项
  • 哪种源码做视频网站好用服务器卸载wordpress
  • 做h5网站pc加手机版要多少钱黄页是干什么用的
  • 四库一平台证书查询台州优化官方网站
  • 电子商务平台发展现状seo搜索引擎排名优化
  • 新闻门户网站免费建设网站排名优化价格
  • 个人建设网站教程怎么建立自己的微信商城
  • 开发菏泽网站建设短视频代运营合作方案
  • 用ps切片做网站能不能完成网站新建设请示
  • 做手机网站兼容中国网创官方网站
  • 请描述网站开发的一般流程图成都专业制作网站公司
  • 做网站以前出名的公司软环境建设网站
  • 春晗环境建设有限公司网站中核集团八大子公司
  • asp网站增加新栏目在哪添加营销型网站建设价格是多少
  • 垂直门户网站怎么做江苏五星建设网站
  • 外贸网站虚拟主机社群网站建设
  • 设计需要看的网站有哪些简述网站建设的
  • 怎么看网站有没有被k开网店的流程和步骤
  • 想学网站开发1企业网站案例