Tag: 二叉树

二叉树直径 – 更好的设计

我写了一个代码来查找二叉树的直径。 需要以下建议: 我可以不在类级别使用静态变量吗? 算法是罚款/任何建议? public class DiameterOfTree { public static int diameter = 0; public static int getDiameter(BinaryTreeNode root) { if (root != null) { int leftCount = getDiameter(root.getLeft()); int rightCount = getDiameter(root.getRight()); if (leftCount + rightCount > diameter) { diameter = leftCount + rightCount; System.out.println(“—diameter————->” + diameter); } if ( leftCount > rightCount) { […]

在二叉树中打印所有根到叶子路径

我试图使用java在二叉树中打印所有根到叶子路径。 public void printAllRootToLeafPaths(Node node,ArrayList path) { if(node==null) { return; } path.add(node.data); if(node.left==null && node.right==null) { System.out.println(path); return; } else { printAllRootToLeafPaths(node.left,path); printAllRootToLeafPaths(node.right,path); } } 主要方法: bst.printAllRootToLeafPaths(root, new ArrayList()); 但它给出错误的输出。 给定的树: 5 / \ / \ 1 8 \ /\ \ / \ 3 6 9 预期产量: [5,1,3] [5,8,6] [5,8,9] 但产量产生: [5,1,3] [5,1,3,8,6] [5,1,3,8,6,9] 有人可以搞清楚……

如何在树中搜索节点并返回它?

我正在尝试在二叉树中搜索节点并返回以防它存在,否则返回null。 顺便说一句,节点类有一个方法名称()返回一个字符串及其名称…到目前为止我所拥有的是: private Node search(String name, Node node){ if(node != null){ if(node.name().equals(name)){ return node; } else{ search(name, node.left); search(name, node.right); } } return null; } 它是否正确??

2个节点之间的最长路径

计算两个节点之间的最长路径。 路径是拱形的。 签名方法是: public static int longestPath(Node n) 在下面的示例二叉树中,它是4 (通过2-3-13-5-2)。 这就是我现在所拥有的,对于给定的树,它只返回0。 public static int longestPath(Node n) { if (n != null) { longestPath(n, 0); } return 0; } private static int longestPath(Node n, int prevNodePath) { if (n != null && n.getLeftSon() != null && n.getRightSon() != null) { int currNodePath = countLeftNodes(n.getLeftSon()) + countRightNodes(n.getRightSon()); […]

使用二叉树实现堆

之前在Stack Exchange中已经提出过这个问题,但没有得到答复。 链接到前面提到的问题: 二进制堆通过二叉树结构实现 如何在二叉树中实现堆。 要实现堆,了解最后一个填充节点和第一个未占用节点非常重要。 这可以在树的级别排序中完成,但是时间复杂度将是O(n)以便找到第一个未占用的节点。 那么,如何在O(logn)中的二叉树中实现堆? 谢谢Shekhar

二叉树的有序迭代器

如何编写Java迭代器(即需要next和hasNext方法),它采用二叉树的根并按顺序迭代二叉树的节点?

具有非递归方法Java的二叉树的大小

您好,我正在尝试编写一个非递归方法来获取节点的大小,因为Java中的递归很昂贵。 这将包括子节点数+ 1(本身)。 我已经转换了一个C实现如何才能非递归地获取二叉树中叶子节点的数量? 在Java但它不正确。 编辑:用于计算二叉树大小的算法,非递归。 public int size(Node n) { Stack sizeStack = new Stack(); int count = 1;//includes the n node if(n == null) { return 0; } sizeStack.push(n); while(!sizeStack.isEmpty()){ node = sizeStack.pop(); while(node != null) { count++; if(node.right != null){ sizeStack.push(node.right); } node = node.left; } } return count; }

在Java中实现BinaryTree

我有这个代码用于BinaryTree创建和遍历 class Node { Integer data; Node left; Node right; Node() { data = null; left = null; right = null; } } class BinaryTree { Node head; Scanner input = new Scanner(System.in); BinaryTree() { head = null; } public void createNode(Node temp, Integer value) { Node newnode= new Node(); value = getData(); newnode.data = […]

从代数表达式创建二叉树

我必须用Java创建一个算术求值器。 为此,我必须解析二叉树中的代数表达式,然后计算并返回结果。 因此,对于第一步,我如何解析二叉树中的表达式? 我知道这个理论,但我的问题是如何用Java做到这一点。 我阅读了以下post创建递归二叉树 但我错过了基本的技巧或方法。 我知道如何创建一个节点(我有一个类,其中包含returnNodeValue,isLeaf,isDoubleNode,isSingleNode等方法),但我想我需要一个方法在二叉树中插入一个节点来实现我想要的东西。 有任何想法吗?

Javagenerics问题:类“不在类型变量的范围内”错误。

我正在研究一个涉及generics的课程。 public interface Keyable {public String getKey();} public interface DataElement extends Comparable<Keyable>, Keyable, Serializable {…} public class Course implements DataElement {…} public interface SearchTree<K extends Comparable<Keyable> & Keyable> extends Serializable {…} public class MySearchTree implements SearchTree { … private class Node { public Course data; public Node left; public Node right; … } } 当尝试在MySearchTree的声明中使用Course类时,我收到一个类型参数错误,指出“Course不在类型变量K的范围内”。 […]