Tag: binary search tree

二进制搜索树toString

我无法以我教授想要的格式打印出二叉搜索树。 他的格式如下: {(12,10,13),(10,8,11),(8,6,9),(6,4,7),(4,2,5),(2,1,3),(1,*,*),(3,*,*),(5,*,*),(7,*,*),(9,*,*),(11,*,*),(13,*,*)} 子集中的第一个数字是根节点,左右节点是左右子节点。 然后,在循环迭代后,左子节点成为根节点。 一切正常,直到我到达子集中只有一个节点的地方。 它只是打印(1,*,*)直到结束,我无法弄清楚如何以另一种方式做到这一点。 是否有可能以递归方式执行此toString方法? 我的代码: public String toString() { if (root == null) return “{}”; String str = “{“; Node tmp = root; for (int i = 0; i < size; i++) { if (tmp.right != null && tmp.left == null) str += "("+tmp.data+", "+tmp.right.data+", *)"; if (tmp.left != null && […]

一个完整的二进制搜索树,在Java中插入了级别顺序

我们得到了一个我们需要编码的作业: 二进制搜索树 树必须是完整的 ,而不是完美的 (这意味着所有不在最低级别或第二低级别的节点应该有2个子节点,而最低级别的节点应该尽可能地离开) 我们需要按级别顺序插入树 因此,如果我有一个元素{0, 1, 2, 3, 4, 5, 6, 7}的数组,则root应为4 ,左侧为2,1,3,0,以及6, 5, 7在右侧。 级别顺序插入将是: 4, 2, 6, 1, 3, 5, 7, 0 只需占用数组的中间并将其作为root用户不起作用。 如果你得到一个1到9个元素的数组,你将有4个作为root(java中的int值,double将是4.5),右边有5个元素,左边有4个元素。 这不是一棵完整的树。 甚至不是一棵完美的树。 我的代码只能向左或向右插入,这取决于它是否比根更小,没有水平顺序插入。 Anytype x参数是要插入的值,而BinaryNode t是我们在树中的当前节点(如果我们需要向左或向右插入新值,我们的比较方式) private BinaryNode insert( AnyType x, BinaryNode t ) { if( t == null ) return new BinaryNode( x, null, null ); […]

理解递归中的堆栈展开(树遍历)

我正在编写一个遍历二叉搜索树的程序。这是我的代码: Main.java public class Main { public static void main(String[] args) { BinaryTree binaryTree = new BinaryTree(); binaryTree.add(50); binaryTree.add(40); binaryTree.add(39); binaryTree.add(42); binaryTree.add(41); binaryTree.add(43); binaryTree.add(55); binaryTree.add(65); binaryTree.add(60); binaryTree.inOrderTraversal(binaryTree.root); } } Node.java public class Node { int data; Node left; Node right; Node parent; public Node(int d) { data = d; left = null; right = null; […]

无法在Java中向二进制搜索树添加1,000,000个元素

我正在将二进制搜索树作为一项任务。 当我尝试添加1,000,000个元素时,我遇到了问题。 插入15,000个元素后,我收到错误: 线程“main”java.lang.StackOverflowError中的exception 我的代码有问题我无法找到我做错的地方。 public class BinarytreeInsert { public static void main(String[] args) { new BinarytreeInsert().run(); } static class Node { Node left; Node right; int value; public Node(int value) { this.value = value; } } public void run() { Node rootnode = new Node(25); System.out.println(“Building tree with root value ” + rootnode.value); System.out.println(“=================================”); […]

如何从返回值的函数中返回任何内容?

我有一个二叉搜索树,我想删除一个节点。 我需要得到它的父,所以我写了一个函数: private BSTreeNode getParent(BSTreeNode root, BSTreeNode node) { if(root == null) return null; if(node.element().lessThan(root.element())) { if(root.getLeft() != null && root.getLeft().element().equal(node.element())) return root; else getParent(root.getLeft(), node); } else { if(root.getRight() != null && root.getRight().element().equal(node.element())) return root; else getParent(root.getRight(), node); } } 与C / C ++不同,Java给出了以下错误: This method must return a result of type BSTreeNode 它强制我在函数的最后一行返回一个值。 […]

树中下降路径的最大长度始终向左

我正在准备技术面试,所以基本上从一开始就学习算法:)我们给了一个BST。 我需要在其中找到desc路径的最大长度,它始终向左或向右。换句话说,示例树的下行路径为2,即15-10-6 5 / \ 2 15 / 10 / \ 6 14 我对算法问题很新。我解决这个问题的步骤是什么? 我的想法是使用DFS和计数器来存储最长的路径。 但我无法弄清楚如何使用递归来完成这项工作,而递归对于这种数据结构来说似乎更自然。 有什么建议/指示吗?

Java:如何实现通用二进制搜索树?

到现在为止,我一直在编写一个Node类 class Node { private value; private Node left; private Node right; public int getValue() { return value; } public void setValue(int value) { this.value = value; } public Node getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public Node getRight() { return right; } public void setRight(Node right) […]

为什么在这个二进制树的方法insert方法中,root始终为null

我试图为BST类实现一个递归插入节点方法 public void insertNode(Node r, Node n) { if(r == null) { System.out.println(“r=n”+ n.data); r = n; } else { System.out.println(“r=! null finding place in tree for “+ n.data); if(n.data <= r.data) { if(r.left == null) r.left = n; else insertNode(r.left, n); } else { if(r.right == null) r.right = n; else insertNode(r.right, n); } […]

检查二叉树是否也是二叉搜索树的问题

我正试图解决这个问题,但我遇到了一些麻烦: 在二叉搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右子树中每个节点的数据值大于该节点的数据值。 给定根节点: class Node { int data; Node left; Node right; } 确定二叉树是否也是二叉搜索树 我有这个代码: boolean check(Node root) { //node doesn’t have any children if (root.left == null && root.right == null) { return true; } boolean leftIsBst = true; boolean rightIsBst = true; if (root.left != null) { leftIsBst = (root.left.data root.data) […]

平衡二进制搜索树

我需要构建一个平衡的二叉搜索树。 到目前为止,我的程序插入从1到26的数字,但我的程序不会将其构建为平衡的二叉搜索树。 如果有人能看到我的代码并帮助我,我将不胜感激。 public class TreeNode { TreeNode leftTreeNode, rightTreeNode;// the nodes int data; //int size; public TreeNode(){//Constructer leftTreeNode = null; rightTreeNode = null; } public TreeNode(int newData){//Constructer with new Data coming in for comparison leftTreeNode = null; rightTreeNode = null; data = newData; } public TreeNode getLeft(){ return leftTreeNode; } public TreeNode getRight(){ return […]