// Tree Node
static class Node {
int data;
Node left, right;
Node(int data)
{
this.data = data;
this.left = null;
this.right = null;
}
@Override public String toString() {
return String.valueOf(data);
}
}
// Function to insert nodes in level order
public Node insertLevelOrder(int[] arr, Node root,
int i)
{
// Base case for recursion
if (i < arr.length) {
Node temp = new Node(arr[i]);
root = temp;
// insert left child
root.left = insertLevelOrder(arr, root.left,
i + 1);
// insert right child
//root.right = insertLevelOrder(arr, root.right,
// 2 * i + 2);
//System.out.println(root);
}
return root;
}
// Function to print tree nodes in InOrder fashion
public void inOrder(Node root)
{
if (root != null) {
inOrder(root.left);
System.out.print(root.left + " ");
//inOrder(root.right);
}
}
// Driver program to test above function
public static void main(String args[])
{
Tree t2 = new Tree();
int arr[] = {9,5,0,-3,-10};
t2.root = t2.insertLevelOrder(arr, t2.root, 0);
t2.inOrder(t2.root);
}
}
我不知道这些节点是否被插入,但输出结果是正确的。我只想插入节点到左边的孩子,我可以消除那代码吗?root.right=insertLevelOrder(arr,root.right,2*i+2);
还有为什么这个循环没有“i++”的符号,int i是如何自动增加的?
有很多缺失的东西。我不会为你解决一切(那不是SO的目的),而是会给你暗示。
首先,你需要有一些东西来建立一个树(设置一个节点的左右节点):
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val=x;
}
TreeNode(int v,TreeNode l,TreeNode r) {
this(x);
left = l;
right = l;
}
@Override public String toString() {
return "(" + (left==null?"*":left) + "," + val + "," + (right==null?"*":right) + ")";
}
}
因此,您可以创建(并打印)如下所示的树(例如):
TreeNode n1 = new TreeNode(1);
TreeNode n3 = new TreeNode(3);
TreeNode n2 = new TreeNode(2,n1,n3);
TreeNode n4 = new TreeNode(4,n3,null);
System.out.println(n4);
在上一节中,我们考虑构建一个二叉搜索树。正如我们所学到的,二叉搜索树的性能可以降级到 $$O(n)$$ 的操作,如 get 和 put ,如果树变得不平衡。在本节中,我们将讨论一种特殊类型的二叉搜索树,它自动确保树始终保持平衡。这棵树被称为 AVL树,以其发明人命名:G.M. Adelson-Velskii 和E.M.Landis。 AVL树实现 Map 抽象数据类型就像一个常规的二叉搜索树,唯一
在我们继续之前,我们来看看执行这个新的平衡因子要求的结果。我们的主张是,通过确保树总是具有 -1,0或1 的平衡因子,我们可以获得更好的操作性能的关键操作。 让我们开始思考这种平衡条件如何改变最坏情况的树。有两种可能性,一个左重树和一个右重树。 如果我们考虑高度0,1,2和3的树,Figure 2 展示了在新规则下可能的最不平衡的左重树。 Figure 2 看树中节点的总数,我们看到对于高度为0的
所以,我一直在研究平衡的二叉查找树。 我谷歌了一下,这是我的发现: 二叉树,其中每个节点的两个子树的深度相差 1 或更小(来自维基百科) 难道就不能把平衡二叉树定义为高度不超过ceil(log(n ^ 1)/log ^ 2)的树吗? 从这个答案来看,提问者似乎已经问了同样的事情,但是公认的答案通过举斐波纳契树的例子拒绝了这个想法。斐波纳契树不是平衡树,对吗?我认为回答者可能会与AVL树中平衡树的定
我目前正在编写一个递归方法,以返回整个二元搜索树上的最大不平衡。我对递归编程非常陌生,所以很难理解。我构建的树的不平衡度为1,但我的方法只返回0。我相信我的逻辑是有缺陷的。 我百分之百确定它正在运行“(root==null){返回0;}”在方法的每个步骤中。我尝试删除它并进一步定义它,它仍在继续这样做。 这是我当前的方法:
好的,所以我目前正在尝试创建一个二叉搜索树,每个节点都包含对某个对象的引用,以及对其左侧子项的引用和对右子项的引用(总共3个变量)。左子项必须始终小于其父项,而右子项必须始终大于其父项。我必须创建两个方法:1种方法( contains()) 来检查元素是否在树中,以及一个add()方法将元素添加到树中的适当位置。 以下是BinarySearchTree类: 下面是TreeNode类(包含在Bina
如果二叉树是平衡的,那么二叉搜索的最佳运行时间是O(log(n))。最坏的情况是,如果二叉树非常不平衡,它基本上表示一个链表。在这种情况下,二进制搜索的运行时间将为O(n)。 但是,如果树只是稍微不平衡,就像这棵树的情况一样: 如果我没记错的话,最好的情况仍然是O(log n)。但是最坏的情况是什么?