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

mixkitcom素材网站河南网站备案代理

mixkitcom素材网站,河南网站备案代理,平衡木网站建设,大二网页设计作业文章目录 1. 基本节点2. 二叉排序树2.1 增加节点2.2 查找#xff08;就是遍历#xff09;就一起写了吧2.3 广度优先遍历2.4 删除#xff08;这个有点意思#xff09;2.5 测试样例 最后的删除#xff0c;目前我测试的是正确的 1. 基本节点 TreeNode: class TreeNode{pri… 文章目录 1. 基本节点2. 二叉排序树2.1 增加节点2.2 查找就是遍历就一起写了吧2.3 广度优先遍历2.4 删除这个有点意思2.5 测试样例 最后的删除目前我测试的是正确的 1. 基本节点 TreeNode: class TreeNode{private int val;TreeNode left;TreeNode right;public void setLeft(TreeNode left){this.left left;}public void setRight(TreeNode right){this.right right;}TreeNode(){}TreeNode(int val){this.val val;}public int getVal(){return this.val;}public String toStringNode(){String ans [ val this.val;if(this.left ! null){ans -left this.left.toStringNode();}if(this.right ! null){ans -right this.right.toStringNode() ];}return ans;}public void setVal(int val){this.val val;} }2. 二叉排序树 class BinaryTree{public TreeNode root; }里面写一些方法吧 2.1 增加节点 其实就是插入 public void insert(int val){TreeNode newNode new TreeNode(val);if(root null){root newNode;return;}TreeNode curNode root;TreeNode preNode;while(true){preNode curNode;if(newNode.getVal() curNode.getVal()){curNode curNode.right;if(curNode null){preNode.setRight(newNode);return;}}else{curNode curNode.left;if(curNode null){preNode.setLeft(newNode);return;}}}}2.2 查找就是遍历就一起写了吧 跟修改一样 public void inOrder(TreeNode root){if(root null)return;inOrder(root.left);System.out.print(root.getVal() );inOrder(root.right);}public void preOrder(TreeNode root){if(root null)return;System.out.print(root.getVal() );preOrder(root.left);preOrder(root.right);}public void HOrder(TreeNode root){if(root null)return;HOrder(root.left);HOrder(root.right);System.out.print(root.getVal() );}2.3 广度优先遍历 利用队列 // 广度优先搜索void BFS(){if(this.root null){System.out.println(BFS: null);return;}System.out.print(BFS: );QueueTreeNode queue new LinkedList();queue.add(this.root);while(!queue.isEmpty()){TreeNode cur queue.poll();System.out.print(cur.getVal() );if(cur.left ! null)queue.add(cur.left);if(cur.right ! null)queue.add(cur.right);}}2.4 删除这个有点意思 分了六类情况 目标节点是叶子节点直接删了目标节点只有一个孩子直接连接上目标节点有俩孩子 左孩子没有右孩子把目标右子树连在左孩子的右孩子上然后目标父亲那条指向左孩子右孩子没有左孩子把目标左子树连在右孩子的左孩子上然后目标父亲那条指向右孩子最坏情况了找目标节点的左孩子最右或者左孩子最左交换值删了那个被交换的孩子 // 删除节点// 获取最左最右节点public TreeNode getLR(TreeNode root){if(root null || (root.left null root.right null))return null;TreeNode ans;if(root.left ! null){if(root.left.right null)return root.left;ans root.left.right;while(ans.right ! null){ans ans.right;}// System.out.println(获取最右);return ans;}if(root.right ! null){if(root.right.left null)return root.right;ans root.right.left;while(ans.left ! null){ans ans.left;}// System.out.println(获取最左);return ans;}return null;}// 获取父节点public TreeNode getParent(TreeNode root, int val){if(root null || (root.left null root.right null) || root.getVal() val)return null;// 左孩子不等if(root.getVal() val){if(root.left ! null){if(root.left.getVal() val)return root;elsereturn getParent(root.left, val);}elsereturn null;}else{if(root.right ! null){if(root.right.getVal() val)return root;elsereturn getParent(root.right, val);}elsereturn null;}}public void delNode(int val){TreeNode parent new TreeNode(Integer.MAX_VALUE);parent.left root;delNode(val, parent, null);this.root parent.left;}public void delNode(int val, TreeNode root, TreeNode parent){if(root null)return;if(root.getVal() val){delNode(val, root.right, root);}else if(root.getVal() val){delNode(val, root.left, root);}else{ // 相等if(root.left ! null root.right null){ // 没有左孩子if(parent.left root){parent.left root.left;}else{parent.right root.left;}}else if(root.left null root.right ! null){ // 没有右孩子if(parent.left root){parent.left root.right;}else{parent.right root.right;}}else if(root.left null root.right null){ // 都是nullif(parent.left root){parent.left null;}else{parent.right null;} }else{ // 进行交换if(root.left.right null){root.left.right root.right;if(parent.left root){parent.left root.left;}else{parent.right root.left;}}else if(root.right.left null){root.right.left root.left;if(parent.left root){parent.left root.left;}else{parent.right root.left;}}else{TreeNode cur getLR(root); // 获取最左最右节点// 删除那个节点TreeNode curParent getParent(root, cur.getVal()); // 获取父节点if(curParent.getVal() cur.getVal())curParent.left null;else{curParent.right null;}root.setVal(cur.getVal()); // 设置值}}}}2.5 测试样例 public class Test2{public static void main(String[] args) {TreeNode node1 new TreeNode(1);TreeNode node2 new TreeNode(2);TreeNode node3 new TreeNode(3);TreeNode node4 new TreeNode(4);TreeNode node5 new TreeNode(5);TreeNode node6 new TreeNode(6);// 进行构建node1.setRight(node2);node1.setLeft(node3);node3.setLeft(node4);node4.setLeft(node5);node4.setRight(node6);// System.out.println(node1.toStringNode());BinaryTree b new BinaryTree();b.insert(5);b.insert(7);b.insert(4);b.insert(2);b.insert(0);b.insert(3);b.insert(8);b.insert(6);b.insert(1);// System.out.println(b.root.toStringNode());// System.out.println(b.getParent(b.root, 3).getVal());for(int i 8; i 0; i--){System.out.println(删除了 i);b.delNode(i);b.BFS();System.out.println();}// // 中序// System.out.println(中序);// // 先序// System.out.println();// System.out.println(先序);// b.preOrder(b.root);// // 后序// System.out.println();// System.out.println(后序);// b.HOrder(b.root);// // 深度System.out.println();b.BFS();} }
http://www.zqtcl.cn/news/111525/

相关文章:

  • 网站和做游戏重庆市建设工程信息网安全监督特种人员
  • 沈阳网站建设活动方案部分网站打不开的原因
  • 网站维护界面设计做的网站一直刷新
  • 国外网站 国内访问速度土木工程毕业设计网站
  • 宿迁网站建设制作中国广告设计网
  • 上门做美容的有什么网站微信网页版本
  • 专门做餐饮运营的网站网站开发相关知识
  • 石家庄门户网站建设免费简历模板的网站
  • 微网站建设市场如何做好平台推广
  • 网站不备案做优化小程序开发前景怎么样
  • 美丽说网站优化百度关键词优化
  • 同性男做的视频网站赶集网招聘最新招聘附近找工作
  • 做挖机配件销售的网站oa办公系统软件哪家好
  • 聊城设计网站商务网站的特点
  • 厦门做个网站多少钱工程建设范围
  • 百度推广官方网站在哪里制作网页
  • 济南集团网站建设方案沈阳手机网站制作
  • 网站备案号注销的结果做网站的外包能学到什么
  • 在线购物网站开发项目网站建设电话推广话术
  • 网站主体信息太原站扩建
  • 西平县住房和城乡建设局网站空间商网站
  • p2p网站建设cms一键生成图片
  • 甘肃省第八建设集团公司网站能够做物理题的网站
  • 团购网站建设方案建筑工程网校官网
  • 佛山建站网站模板小公司管理方法
  • 常德住房和城乡建设局网站做风险代理案源的网站
  • 手机网站开发人员选项wordpress加载媒体库
  • 做钓鱼网站用哪种编程语言张家界有实力seo优化费用
  • 如何做一个主题网站做网站必须有框架么
  • 建设网站需要什么知识上海高端网页设计