这不是一个家庭作业问题。我正在练习面试。这是问题描述
编写一个方法构造,它接受一个整数n作为参数,并构造一个新的整数树,其中n个节点编号为0到(n-1),这样树的有序遍历将按顺序产生值。树应该是平衡的,因为任何节点的左子树中的值数量应该总是在其右子树中的值数量之一之内。如果节点的两个子树中的一个有额外的值,它应该出现在正确的子树中。
例如,给定IntTree类型的变量树,调用tree。构造(7);应生成如下所示的第一棵树。如果电话是在树上。构造(10);,树的状态应该是下面显示的第二棵树的状态。
假设您正在将此方法添加到IntTree类,定义如下:
公共类IntTree{private IntTreeNode overallRoot;…}
以下是我的初步想法空的情况很容易,你只需使节点为空。我看到,对于任何n,都需要引入一个值为n-1的新节点。我还看到,对于所有的奇数ns,总的根向上移动了1。我一开始就通过移动整棵树来解决这个问题。(即将原始根向左移动,将新根移动到整个根)。要做到这一点,您需要不断访问整个根目录。问题是,当我达到n=4时,我必须在整个节点的子节点右侧引入一个新节点3(意味着我无法访问整个节点)。是否有更好的方法(添加和维护访问权限)?
为确保满足以下条件:
如果一个节点的两个子树中有一个额外的值,它应该出现在右子树中。
这应该行得通。
Node make (int a, int b) {
if (a > b) return null;
if (a == b) return new Node (a);
int r = a + ((b - a) >>> 1);
return new Node (r, make(a, r-1), make(r+1, b));
}
有几种方法,但在面试中最简单的方法是递归。对于范围[a, b]将其分为[a, r-1], r,[r 1, b]。然后构建一个以r为根的树,并递归地为范围构建树,使它们的根成为子元素。剩下的就是确保失踪儿童的条件得到满足。这只是仔细挑选r
。
class InorderIntegerTree {
Node root;
static class Node {
int val;
Node left, right;
Node(val, left, right) {
this.val = val;
this.left = left;
this.right = right;
}
}
Node make(int a, int b) {
if (a > b) return null;
int r = b + (b - a) / 2;
return new Node(r, make(a, r-1), make(r+1, b));
}
InorderIntegerTree(int n) {
root = make(0, n-1);
}
}
刚刚在学校学习过二叉树,二叉树的两条规则是 每个节点最多有2个子节点 存在为每个节点的子节点(有序对)定义的线性排序 现在,所有类型的二叉树(完整、完整等)都是二叉树,因此它们必须满足这两个条件。 然而,我在GeeksForGeeks上看到了这个例子: 这里如何定义“线性排序”,有序对? 对于图中的兄弟节点,一些左侧节点比右侧节点大,一些右侧节点比左侧节点大。 如果要求检查给定的树是否是二叉树,我
我正在将以下数据作为赋值的一部分读取到二叉树(不是严格的二叉查找树)中: 它们被读取到python、和中的三个列表中,其中第一行具有整数是节点数。接下来的n行是键,左,右。其中左是父级左子级的键是,同样右子级的键是,因此例如第一行是4的键是根,意味着2是4的左子级,意味着5是4的右子级,以此类推,-1代表左右意味着这个键是叶子: 此示例的树结构 问题是正在添加根的左右子节点,但没有添加其中的任何子
我想从一个非常不寻常的输入中构造一个二叉树。输入包含: > 节点总数。 根的整数标签。 所有边(相互连接的顶点/节点)的列表。列表中的边缘是未排序的,只有一个规则用于确定左/右子项 - 列表中首先出现的边缘中的子项始终位于左侧。顶点对中子/父的顺序也是随机的。 我已经提出了一些直截了当的解决方案,但它们需要通过所有边缘的列表进行多次搜索(我基本上会找到具有标记根的2个边缘,并对所有子树重复此过程。
class Node(object): def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node
问题内容: 我正在构造一个二叉树。让我知道这是否是正确的方法。如果没有,请告诉我怎么做?我在构建通用二进制树的代码已找到的地方找不到合适的链接。BST的每个地方都已编码。 这是我要制作的二叉树。我应该能够进行所有的树遍历。 问题答案: 我认为这是您要寻找的:
问题内容: 这是我所拥有的: 如何编写代码以在列表末尾添加节点? 所以如果我有 我怎么去 其实…我什至不确定是否要添加到最后。我认为添加然后排序是有效的吗?不确定。 谢谢! 问题答案: