Tag: 二叉树

如何从级别顺序遍历字符串构造二叉树

考虑具有以下属性的二叉树: 如果内部节点(非叶节点)有两个子节点,则其值为1。 叶节点的值为0,因为它没有子节点。 树上的级别顺序遍历将生成1和0的字符串(通过在访问每个节点时打印奇怪的值)。 现在给定此字符串构造二叉树并在树上执行post order遍历。 后订单字符串应该是程序的输出。 例如:输入字符串是111001000 。 从中创建二叉树。 然后在树上执行post order遍历,这将导致输出: 001001011 问题的“症结”是仅从级别顺序字符串创建二叉树。 我该怎么办?

用Java构造二叉树

我正在构建一个二叉树。 如果这是一种正确的方法,请告诉我。 如果没有请告诉我如何? 我找不到构建一般二叉树的正确链接。 BST到处都是编码的。 3 / \ 1 4 / \ 2 5 这是我想要制作的二叉树。我应该能够完成所有的树遍历。简单的东西。 public class Binarytreenode { public Binarytreenode left; public Binarytreenode right; public int data; public Binarytreenode(int data) { this.data=data; } public void printNode() { System.out.println(data); } public static void main(String ar[]) { Binarytreenode root = new Binarytreenode(3); Binarytreenode n1 = new […]

BST有重复

我知道, BST不允许重复。 例如,如果我有一个单词“RABSAB”。 上述字符串的二进制搜索树是: R /\ AS \ B 如果我们想在树中包含重复项,该怎么办? 树怎么会改变? 我在接受采访时被问到这个问题。 他们让我画画: 二叉树 不平衡的二进制搜索树 没有重复的二叉搜索树 带有重复项的二叉搜索树 任何帮助表示赞赏! PS:通过绘制相关树帮助我

寻找已实现二叉树的java库

是否有一个可以使用二进制树的java库? 我不期待测试和实施我自己的。

IntervalTree DeleteNode Java实现

我需要在Java中使用IntervalTree或RangeTree,并且无法找到具有工作删除支持的实现。 在sun.jvm.hotspot.utilities.IntervalTree中有一个内置的,但RBTree超类中的deleteNode方法指出: /** * FIXME: this does not work properly yet for augmented red-black * trees since it doesn’t update nodes. Need to figure out exactly * from which points we need to propagate updates upwards. */ 尝试从树中删除节点最终会抛出exception: 节点的最大端点未正确更新 在sun.jvm.hotspot.utilities.IntervalTree的子类中正确实现deletefunction有多难? 或者是否有另一个Interval Tree实现已经正确实现了这个? 目前我只是在擦除树并在每次删除时重新填充它,这远非理想(注意:在RBTree中设置DEBUGGING = false会大大加快)。

如何从preorder和inorder遍历构建二叉树

我正在做一个关于从预订和顺序遍历(每个节点中的一个字符串)构建二叉树的任务,并试图围绕如何构建实际树包裹我的大脑。 以下是关于如何完成此操作的思考过程: 将预订中的第一个条目存储为根节点 搜索该条目的inorder。 将字符放在根节点的左侧,并将它们保存为char数组。 将chars放在根节点的右侧,并将它们保存为char数组。 创建一个新树,以root为父,其中2个子为左右char数组。 继续递归,直到预订长度为0。 我已经完成了步骤1-4,但我不太确定如何正确构建我的树,并且想知道是否有人有任何指针。 谢谢。

二叉树的最低共同祖先

这是一个受欢迎的访谈问题,我可以在这个主题上找到的唯一一篇文章来自TopCoder 。 对我来说不幸的是,从面试答案的角度看,它看起来过于复杂。 除了绘制两个节点的路径并推断祖先之外,是否有更简单的方法可以做到这一点? (这是一个很受欢迎的答案,但是面试问题的变化需要一个恒定的空间答案)。

检查树是否是二叉搜索树

我编写了以下代码来检查树是否是二进制搜索树。 请帮我查一下代码: 好的! 代码现在已编辑。 以下post中有人建议使用这个简单的解决方案: IsValidBST(root,-infinity,infinity); bool IsValidBST(BinaryNode node, int MIN, int MAX) { if(node == null) return true; if(node.element > MIN && node.element < MAX && IsValidBST(node.left,MIN,node.element) && IsValidBST(node.right,node.element,MAX)) return true; else return false; }

2个二叉树的交集会引发Stack Overflow错误

我试图交叉两个二叉树,并创建一个新的二叉树与相同的节点,但以下创建stackOverflow错误。 谁能帮我? private OrderedSet resultIntersect = new OrderedSet(); public OrderedSet intersection(OrderedSet other) { OrderedSet result = new OrderedSet(); if (other.root == null || root == null) return result; else if (height() == 0 && other.height() == 0 && other.root.data.equals(root.data)) { result.insert(root.data); return result; } else { intersection(other, root, other.root); result = resultIntersect; } return result; […]

组合两个二叉树的算法?

例如: 两棵树: 8 9 5 7 4 20 30 成为一棵树?