- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此信息与树的类型有关。换句话说,你应该认识到这些信息金字塔的顶峰(Max Heap),或二叉搜索树或两者的组合或它们都没有。输入格式如下: (94,RR) (17,L) (36,RL) (51,R) (20,) (76,RRR) ()
输入格式树中给定对的每个节点。第一个值表示节点的数量,第二个值表示到达该节点必须导航的根路径。 Node 没有办法代表树的根。有了这些信息,您应该能够输入“识别树”。例如树如下:
(94,RR) (17,L) (36,RL) (51,R) (20,) (76,RRR) ()
这棵树不是最大金字塔(最大堆),不是二叉搜索树,也不是两者的组合。
Entrance :
At the entrance you get a string that information is relevant to a tree. Each tree
With the statement (s) end. Entry Exit program ends.
Output:
You are one of the following phrases in your printed output.
1.BST: If the input tree is a binary search tree.
2.MaxHeap: If the tree is the maximum pyramid entrance.
3.BST MaxHeap: If the combined input of binary search tree and the pyramid is the maximum.
4.Nothing: If there is none of the above.
**Sample Input:**
(94,RR) (17,L) (36,RL) (51,R) (20,) (76,RRR) ()
(94,) (59,LL) (61,RR) (53,LR) (79,L) (77,R) (15,RL) ()
(72,) (44,LR) (15,L) (2,LL) ()
Exit
**Sample Output:**
Nothing
MaxHeap
BST
现在我无法解决这个问题。请帮忙。 谢谢。
最佳答案
让我们用数组表示您的数据。我们可以通过使用公式 2*i
作为节点 i
的左子节点和 2*i+1
来从该数组构建二叉树对于节点i
的右子节点。我还假设您已经准备好自己的基本 BST。
1.如何确定给定的树是否是 BST: 按表示树位置的 String
的大小对输入进行排序。您的数据可以存储在名为 Pair
的类中,该类存储表示值的整数和表示相对于根的位置的字符串。然后我们就可以对其进行排序。以下是实现该类和存储该类的数组的方法:
class Pair
{
int val;
String pos;
Pair(int val, String pos)
{
this.val=val;
this.pos=pos;
}
}
现在在主方法或任何地方,您可以开始构建树数组
int n;
//Take n which is number of nodes here
Pair[] input=new Pair[n];
for(int i=0;i<n;i++)
{
input[i]=new Pair(*input value*, *input Position*);
}
Arrays.sort(input, new Comparator<Book>() //Sorts by the distance from start node
{
@Override
public int compare(Pair p1, Pair p2)
{
return p1.pos.length()-p2.pos.length();
}
});
现在,只需在 BST 中创建一个名为 Insert(Node curr, int value, String where, intillWhere)' 的递归方法。我再次假设您的 BST 有一个
Node` 类,用于存储数据以及左右子引用。
class Node //The node for the BSt should look something like this
{
Node left, right;
int data;
Node(Node left, Node right, int data)
{
this.left=left;
this.right=right;
this.data=data;
}
}
<br>
//Method for inserting into the BST
void Insert(Node curr, int value, String where, int tillWhere)
{
if(curr==null)
curr=new Node(value);
else
{
if(where.charAt(tillWhere)=='L')
Insert(curr.left, value, where, tillWhere+1);
else
Insert(curr.right, value, where, tillWhere+1);
}
}
现在,只需执行 BST 的中序遍历
,并将结果存储在数组 Inorder
中。之后,如果数据按排序顺序排列,则它将是 BST。
ArrayList<Integer> inOrder=new ArrayList<Integer>();
//Method
void Inorder(Node curr)
{
if(curr!=null)
{
if(curr.left!=null)
Inorder(curr.left);
inOrder.add(curr.data); //Appending to list
if(curr.right!=null)
Inorder(curr.right);
}
}
//Now after method call:
boolean isBST(ArrayList<Integer> inOrder)
{
for(int i=1;i<=inOrder.size();i++)
if(inOrder.get(i)<inOrder.get(i-1)) //Not possible in BST
return false;
return true
}
如何确定给定的树是否是堆:只需满足父级 >= 其子级的属性即可。我们可以为此编写一个简单的递归解决方案,如下所示:
boolean isHeap(int[] arr, int i, int n)// array storing the tree, initial postion , size
{
if (i > (n - 2)/2) //Root
return true;
// If an internal node and is greater than its children, and
// same is recursively true for the children
if (arr[i] >= arr[2*i + 1] && arr[i] >= arr[2*i + 2] &&
isHeap(arr, 2*i + 1, n) && isHeap(arr, 2*i + 2, n))
return true;
return false;
}
你可以根据我上面给你的数据找出你问题中的所有4个条件。我希望这有帮助!
关于java - java 中的树 (bst,maxHeap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243762/
我有一个最大堆和一个最小堆,其中最大堆的最大元素小于或等于最小堆的最小元素。 我现在想移动最小堆的最小元素成为最大堆的最大元素。 一种方法是弹出最小堆的顶部元素并将其插入最大堆。 有没有更有效的方法来
我将使用priorityQueue实现特定的java maxHeap,如下所示:假设我有一个“Customer”类,它有一个双变量名称“marginalGain”。 PriorityQueue mar
在优先队列的实现中,我必须使用递归来确定作为方法 IsMaxHeap 的参数接收的数组是否是最大堆。 我想确保我评估了所有可能使这项工作正常进行或不正常工作的情况。 static boolean is
我现在正在我的算法课上学习堆,但无法理解在实践中,最大堆如何优于仅将最大值存储在头指针处的链表。 让一个节点有两个比它小的 child 有什么意义,为什么它不能像链表那样只有一个?基本上,堆能做什么而
刚刚通过创建堆遇到了一些问题。我根据我正在使用的接口(interface)设置了限制,并且我正在尝试访问一个可以有效添加堆的构造函数,以证明与通过插入添加堆相比,时间复杂度有所降低。换句话说,我需要这
我目前正在开发一个必须创建最大堆的项目。我目前正在使用我的教科书版本的堆,它看起来像: public MaxHeap(int initialCapacity) { if (initialCap
我正在 Java 中实现一个 MaxHeap,它根据其键进行排序。每个键还与一个值相关联。当我尝试运行程序时,出现异常:Exception in thread "main"java.lang.Clas
#include #include #include #include typedef struct listNode { int id; struct listNode *next;
这是我的代码。我对 c 和指针很陌生,所以可能是指针上的错误。 #include #include typedef int (*comparatorPtr)(void*, void*); bool
假设我们要根据值对 HashMap 进行排序。我们实现了一个带有比较器的 priorityQueue 来做到这一点。因此,生成的 pq 从索引 0 到末尾从最大到最小排序。 代码如下: Priorit
此信息与树的类型有关。换句话说,你应该认识到这些信息金字塔的顶峰(Max Heap),或二叉搜索树或两者的组合或它们都没有。输入格式如下: (94,RR) (17,L) (36,RL) (51,R)
我通过扩展 ArrayList 实现了堆。然而,它似乎作为 minheap 工作得很好(与这段代码几乎没有区别),但它不能作为 maxheap 正常工作。我认为我有一部分或一部分使用不当。我想知道哪里
我在网上搜索了 MinHeap 和 Maxheap 的 Python 实现。 import heapq class MinHeap: def __init__(self): s
我在 Windows Server 2008 上运行 Redis 2.8.19。我收到一条错误消息,指出我的 Redis 堆的磁盘空间不足。 (内存映射文件而不是 fork())。 如果我在 cfg
我想知道java是否有任何集合可以帮助我实现minheap和maxheap。我知道我可以使用 PriortyQueue 数据结构来实现 maxheap。我们可以对 minheap 使用同样的方法吗?如
我正在使用 运行 Findbugs with Ant任务。我正在运行 Ant build.xml来自 Jenkins 。 我的构建卡在低堆大小上:Exception in thread "main"
我有这段 heapSort 的代码,它工作正常。我还了解当起始 index 为 1 而不是 0 时 algorithm 的工作原理。我的问题是下面的 maxheap 方法本身适用于所有大于零的索引,但
我是一名优秀的程序员,十分优秀!