我有一个被破坏的二叉树,它必须通过确保所有的childNodes都可以被跟踪或者从rootNode中得到它们的源来修复。所以对于所有的childNodes,我想得到它们的根(通常应该是id:0)。
获取二叉树中每个节点的代码。
FOREACH nodes
CHECK RELATIONSHIP IF ROOT PARENT ID NOT 0
ID 7与根节点分离,如何运行检查以确定7、9和10与根节点断开连接。
我完全不知道如何在Haskell中进行一些树转换。我需要从一棵玫瑰树开始,定义为:
data Rose a = Node a [Rose a] deriving (Eq, Show, Ord)
到二叉树,它被定义为:
data Btree a = Empty | Fork a (Btree a) (Btree a) deriving (Eq, Show, Ord)
在我的课上,我得到了一个类似的函数,但使用了不同的二叉树定义。对于该函数,玫瑰树的定义相同,而二叉树的定义如下:
Btree a = Leaf a | Fork (Btree a) (Btree a)
其中从玫瑰树到二叉树的函数定义
对于新的计算机科学作业,我们将使用有序二叉树实现一个列表/数组。我只想要一个建议,而不是一个解决方案。
这个想法是有一个二叉树,它的节点可以通过索引访问,例如
t = ListTree()
t.insert(2,0) # 1st argument is the value, 2nd the index to insert at
t.get(0) # returns 2
存储值的Node类是不可修改的,但它有一个属性size,它包含下面的子节点的总数,以及指向子节点并相应地存储值的left、right和value。
我目前的主要问题是跟踪索引-因为我们不允许在节点本身中存储节点的索引,所以我必须
问题如下:
找到一个算法,该算法获取指向二叉树的指针(指向二叉树的开头),并返回处于偶数深度(级别)的叶子数。
在本例中,算法将返回2,因为我们不会计算1级中的叶数(因为1不是偶数)。
我想我需要一个递归算法。如果我在函数中传递两个参数(一个pointer to a tree和level),这是非常容易的。我想知道我是否可以通过传递指针来解决这个问题,而不是级别。
我最近学到了二叉树,并决定练习一下。我认为我非常理解指针和引用参数,但随后我看到了以下代码:
void doubleTree(struct node* node) {
struct node* oldLeft;
if (node==NULL) return;
// do the subtrees
doubleTree(node->left);
doubleTree(node->right);
// duplicate this node to its left
oldLeft = node->left;
更新:只有当我将二叉树用于字符串时,才会出现此问题。如果我能感觉到的话,一切都很好!
几个月前,我用C++编写了一个二叉树实现。一切似乎都正常(插入、移除、遍历、查找.)现在,当我根据这个二叉树类编写一个新的类时,查找方法似乎是错误的,但我找不到原因。
问题是: find返回一个指向节点的指针,但出于某种原因,只有当这个节点是根节点时,我才能访问它的成员变量。我不太明白为什么。和警察有关吗?或者我的插入函数有问题吗?有人能帮我吗,因为我觉得有点迷茫
以下是我的二叉树接口:
template <class N>
class Node {
public:
N data;
No
我使用递归(参考一本关于数据结构和算法的书)实现了查找二叉树大小的函数。
代码片段如下所示:
// Returns the total number of nodes in this binary tree (include the root in the count).
public static int size(BinaryTreeNode root) {
int leftCount = root.left == null ? 0 : size(root.left);
int rightCount = root.right == null ? 0 : size(root.
在中,关于寻找计算二叉树直径的算法,提供了以下代码作为解决问题的可能答案。
public static int getDiameter(BinaryTreeNode root) {
if (root == null)
return 0;
int rootDiameter = getHeight(root.getLeft()) + getHeight(root.getRight()) + 1;
int leftDiameter = getDiameter(root.getLeft());
int rightDiameter = g
我试图想出一个从二叉树/二叉树中删除重复项的算法。到目前为止我能想到的是
将树的顺序遍历存储在数组中。
如果树没有排序,则对数组进行排序。
从数组中删除重复项并重建二叉树。
我们是否也需要存储树的预顺序遍历来重建树?
这使得复杂性出现在O(n log n )时间和O(n)空间上。我们能做得更好吗?伪代码/代码示例将不胜感激。
编辑1:假设二叉树的结构由以下对象提供
public class Node
{
int data;
Node right;
Node left;
// getters and setters for the left and right node
int height(struct node* node)
{
/* base case tree is empty */
if (node == NULL)
return 0;
/* If tree is not empty then height = 1 + max of left
height and right heights */
return 1 + max(height(node->left), height(node->right));
}
以上是查找二叉树高度的非常基本的代码。但是,我无