Tag: 二叉树

如何使用递归实现完整二叉树而不比较节点的值?

public void recurInsert(BinaryTree.Node root, BinaryTree.Node newNode, int height) { if (newNode == null) { System.out.println(“InsertNode is empty, please create new one”); return; } else{ if (height == 1) { if (root == null) return; else if (root.leftChild == null) { root.leftChild = newNode; System.out.println(“left” + newNode.data); } else { root.rightChild = newNode; System.out.println(“right” + newNode.data); […]

Java算法,用于在二叉树中查找最大的独立节点集

通过独立节点,我的意思是返回的集合不能包含直接关系的节点,不能同时包含父节点和子节点。 我试图使用Google,但没有成功。 我认为我没有正确的搜索词。 一个链接,任何帮助将非常感谢。 刚刚开始这个。 我需要返回实际的独立节点集,而不仅仅是金额。

使用二进制堆的多个数组合并

给定k个整数的整数数组,每个整数包含一个未知的正数元素(每个数组中的元素数量不一定相同),其中所有k个数组中的元素总数为n,给出一个合并k个数组的算法单个排序数组,包含所有n个元素。 该算法的最坏情况时间复杂度应为O(n∙log k)。

使用链接列表创建完整的二叉树,无需比较节点值

我试图使用链表而不是arraylist创建一个完整的二叉树,而不比较节点值。 我的意思是插入一个新值,我不希望比较该值是否小于,大于或等于根值,以便将其添加到左侧链接或右侧链接,但仍然能够创建一个完整的二叉树。 你认为这可能吗? 如果是的话,你有任何想法,或者你能指出我可以使用/阅读的东西吗? 编辑: 这是一个让我的问题更清晰的例子: 我按照插入方法提供的顺序添加数字:1 2 3 4 5 6 insert方法负责树的结构。 1成为根,因为它是第一个增加的值。 2是1的左孩子 3正确的孩子1 4左边的孩子2 5正确的孩子2 6左边的孩子3 解: public void insert(Comparable item) { total++; if (root == null) { root = new TreeNode(item); } else { int quotient=total; Stack path = new Stack(); TreeNode p = root; // helper node to follow path […]

二叉搜索树的实例和java

我正在尝试使用Cormen的伪代码实现BST算法但仍存在问题。 这是我的节点代码: public class Node { Node left; Node right; int value; Node(int value){ this.value = value; this.left = null; this.right = null; } } 而对于Bstree: public class Btree { Node root; Btree(){ this.root = null; } public static void inorderWalk(Node n){ if(n != null){ inorderWalk(n.left); System.out.print(n.value + ” “); inorderWalk(n.right); } } public static […]

Java相当于C ++ std :: map?

我正在寻找一个具有C ++ std :: map常用实现特性的Java类(据我所知,它是一个自平衡二进制搜索树): 插入/删除/搜索的O(log n)性能 每个元素由唯一键和映射值组成 键遵循严格的弱顺序 我正在寻找开源或设计文档的实现; 我可能最终会支持原始键/值。 这个问题的风格类似于: Java等价于std :: deque ,其答案是“来自Java的原始集合的ArrayDeque”。

在二叉树中寻找最小共同祖先

可能重复: 如何在二叉树中找到两个节点的共同祖先? 二叉树的第一个共同祖先 我有一个二叉树如下。 我需要找到最不常见的祖先(LCA)。 例如,6和4的LCA是1,4和5的LCA是2。 1 / \ 2 3 / \ / \ 4 5 6 7 任何人都可以建议我应该如何处理和解决这个问题?

我如何迭代二叉树?

现在我有 private static void iterateall(BinaryTree foo) { if(foo!= null){ System.out.println(foo.node); iterateall(foo.left); iterateall(foo.right); } } 你能把它改成Iteration而不是递归吗?

遍历Java中二叉树的所有节点

假设我有一个简单的二叉树节点类,如下所示: public class BinaryTreeNode { public String identifier = “”; public BinaryTreeNode parent = null; public BinaryTreeNode left = null; public BinaryTreeNode right = null; public BinaryTreeNode(BinaryTreeNode parent, String identifier) { this.parent = parent; //passing null makes this the root node this.identifier = identifier; } public boolean IsRoot() { return parent == null; } } […]

在没有递归的情况下查找二叉树的最大深度

查找二进制树的最大深度深度的递归机制非常简单,但是如果没有递归,我们怎样才能有效地执行它,因为我有一个大树,我宁愿避免这种递归。 //Recursive mechanism which I want to replace with non-recursive private static int maxDepth(Node node) { if (node == null) return 0; return 1 + Math.max(maxDepth(node.left), maxDepth(node.right)); } PS:我正在寻找Java的答案。