二叉查找树 ╰+攻爆jí腚メ 2022-05-26 07:49 296阅读 0赞 package 树; /\*\* \* 定义一个结点 \*/ class Node\{ Node left = null; Node right = null; Integer data; public Node(Integer data)\{ this.data = data; \} \} public class BinarySearchTree \{ Node root = null; /\*\* \* 添加元素 \*/ public void addNode(Integer data)\{ Node node = new Node(data); if(root == null)\{ root = node; return; \} Node temp = root; while(true)\{ if(data<temp.data)\{//小于的情况 if(temp.left == null)\{ temp.left = node; return; \}else\{ temp = temp.left; \} \}else if(data>temp.data)\{//大于的情况 if(temp.right == null)\{ temp.right = node; return; \}else\{ temp = temp.right; \} \}else\{ //相等的情况(去重复) return; \} \} \} /\*\* \* 删除元素 \* 思路: \* 如果节点是叶子结点,可以直接删除。 \* 如果节点有一个子节点,则将父节点直接指向其子节点。 \* 如果节点有两个子节点(最为复杂),用其右子树中的最小的数据代替该节点的数据并递归地删除那个节点。 \*/ /\*\* \* 判断是否包含某元素 \*/ public boolean isContains(Integer data)\{ if(root == null)\{ return false; \} Node temp = root; while(true)\{ if(data<temp.data)\{//小于的情况 if(temp.left == null)\{ return false; \}else\{ temp = temp.left; \} \}else if(data>temp.data)\{//大于的情况 if(temp.right == null)\{ return false; \}else\{ temp = temp.right; \} \}else\{ //相等的情况 return true; \} \} \} /\*\* \* 求二叉搜索树的高度 \*/ public int getHeight()\{ return getHeight(root); \} private int getHeight(Node node) \{ if(node == null)\{ return 0; \} int i = getHeight(node.left); int j = getHeight(node.right); return (i>j)?i+1:j+1; \} /\*\* \* 求二叉搜索树的节点个数 \*/ public int getSize()\{ return getSize(root); \} private int getSize(Node node) \{ if(node == null)\{ return 0; \} return 1+getSize(node.left)+getSize(node.right); \} /\*\* \* 求二叉搜索树中的最大值 \*/ public Integer getMax()\{ if(root == null)\{ return null; \} Node temp = root; while(temp.right!=null)\{ temp = temp.right; \} return temp.data; \} /\*\* \* 求二叉搜索树中的最小值 \*/ public Integer getMin()\{ if(root == null)\{ return null; \} Node temp = root; while(temp.left!=null)\{ temp = temp.left; \} return temp.data; \} /\*\* \* 前序遍历方法递归实现 \*/ public void preOrder()\{ preOrder(this.root); \} private void preOrder(Node node) \{ if(node == null)\{ return; \}else\{ System.out.print(node.data+" "); preOrder(node.left); preOrder(node.right); \} \} /\*\* \* 中序遍历方法递归实现 \*/ public void midOrder()\{ midOrder(this.root); \} private void midOrder(Node node) \{ if(node == null)\{ return; \}else\{ midOrder(node.left); System.out.print(node.data+" "); midOrder(node.right); \} \} /\*\* \* 后序遍历方法递归实现 \*/ public void aftOrder()\{ aftOrder(this.root); \} private void aftOrder(Node node) \{ if(node == null)\{ return; \}else\{ aftOrder(node.left); aftOrder(node.right); System.out.print(node.data+" "); \} \} /\*\* \* 主函数 \*/ public static void main(String\[\] args) \{ BinarySearchTree bst = new BinarySearchTree(); //构建二叉搜索树 int\[\] arr = \{2,4,5,1,3,9,7,8,6\}; for(int i:arr)\{ bst.addNode(i); \} System.out.println("中序遍历:"); bst.midOrder(); System.out.println(); System.out.println("前序遍历:"); bst.preOrder(); System.out.println(); System.out.println("后序遍历:"); bst.aftOrder(); System.out.println(); System.out.println("二叉搜索树的高度为:"+bst.getHeight()); System.out.println("二叉搜索树的节点个数为:"+bst.getSize()); System.out.println("二叉搜索树是否包含元素2?"+bst.isContains(2)); System.out.println("二叉搜索树的最大节点为:"+bst.getMax()); System.out.println("二叉搜索树的最小节点为:"+bst.getMin()); \} \}
相关 leetcode——二叉树、二叉查找树 leetcode——二叉树、二叉查找树 104. 二叉树的最大深度 111. 二叉树的最小深度 226. 翻转二叉树 r囧r小猫/ 2022年09月05日 12:39/ 0 赞/ 225 阅读
相关 二叉查找树 二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持快速查找一个数据,还支持快速插入、删除一个数据。它是怎么做 港控/mmm°/ 2022年08月28日 03:51/ 0 赞/ 235 阅读
相关 二叉查找树 本文将会介绍一种能够将链表插入的灵活性和有序数组查找的高效性结合在一起的符号表实现。 定义 一颗二叉查找树(BST)是一颗二叉树,其中每个结点都含有一个Comparab 布满荆棘的人生/ 2022年07月16日 00:22/ 0 赞/ 206 阅读
相关 二叉查找树 package 树; /\\ \ 定义一个结点 \/ class Node\{ Node left = null; Node righ ╰+攻爆jí腚メ/ 2022年05月26日 07:49/ 0 赞/ 297 阅读
相关 二叉树(四)---查找二叉树 上次我说了如何去遍历一棵二叉树,今天我来说一说查找二叉树是怎样实现的。 首先我来介绍一下查找二叉树是怎样生成的。 这个是我为我的二叉树设置的一些基础的组成数据结构 深碍√TFBOYSˉ_/ 2022年05月25日 09:37/ 0 赞/ 250 阅读
相关 二叉查找树 <table> <tbody> <tr> <td> <p>package 树;</p> <p>import java.util.Stack;</p> <p>/ 我就是我/ 2022年05月13日 01:40/ 0 赞/ 251 阅读
相关 二叉查找树 二叉查找树 概念 二叉查找树,又称为二叉排序树、二叉搜索树。 二叉查找树有以下几个特性 若左子树不空,则左子树上所有结点的值均小于它的根结点的值 若 旧城等待,/ 2022年04月10日 02:39/ 0 赞/ 467 阅读
相关 二叉查找树 / 这是一个二叉查找树,实现了以下操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继。上述所有操作时 迈不过友情╰/ 2022年02月26日 11:48/ 0 赞/ 321 阅读
相关 二叉查找树 二叉查找树有这几个规则 1、若左子树不为空,那么左子树所有节点的值小于均小于他的根节点的值。 2、若右子树不为空,那么右子树的所有节点的值大于根节点的值。 3、左右子树也 ﹏ヽ暗。殇╰゛Y/ 2021年09月22日 09:40/ 0 赞/ 498 阅读
相关 二叉查找树 理解 在二叉树的基础上,假设一个节点值都为Integer类型,现在有一个节点A,那么A的左子树中的所有值一定小于A节点的值,A的右子树中的所有值一定大于A的节点的值,如果 清疚/ 2021年09月11日 06:56/ 0 赞/ 510 阅读
还没有评论,来说两句吧...