使用链接列表创建完整的二叉树,无需比较节点值

我试图使用链表而不是arraylist创建一个完整的二叉树,而不比较节点值。 我的意思是插入一个新值,我不希望比较该值是否小于,大于或等于根值,以便将其添加到左侧链接或右侧链接,但仍然能够创建一个完整的二叉树。

你认为这可能吗? 如果是的话,你有任何想法,或者你能指出我可以使用/阅读的东西吗?

编辑:

这是一个让我的问题更清晰的例子:
我按照插入方法提供的顺序添加数字:1 2 3 4 5 6
 insert方法负责树的结构。
 1成为根,因为它是第一个增加的值。
 2是1的左孩子
 3正确的孩子1
 4左边的孩子2
 5正确的孩子2
 6左边的孩子3

解:

public void insert(Comparable item) { total++; if (root == null) { root = new TreeNode(item); } else { int quotient=total; Stack path = new Stack(); TreeNode p = root; // helper node to follow path quotient /= 2; // skip last step while (quotient>1) { // build path to follow path.push(quotient%2); quotient /= 2; } while (!path.isEmpty()) { Object q = path.pop(); if (q.equals(0)) p = p.getLeft(); else p = p.getRight(); } if (total%2==0) // check last step p.setLeft(new TreeNode(item)); else p.setRight(new TreeNode(item)); } } 

记下树中有多少项目。

然后,要添加第n个项目,请按照将n重复除以2创建的路径并跟踪余数。 按照其余部分反向创建的“路线”:其中1表示右,0表示左。

例如,要添加第11项:

 11/2 = 5 (1) 5/2 = 2 (1) 2/2 = 1 (0) 

这意味着从根,你左,右,右。

看来你的问题与LinkedList无关。 这有点令人困惑。

如果您已知道树中有多少元素,则可以从该数字计算位置。 它的二进制表示是你必须采取的路径。 看到这里 。

如果您对树的当前状态一无所知,则需要先进行广度优先搜索以找到第一个空白点。

二叉树的整个基础是比较值并在树上向左或向右发送它们。

因此,没有比较就不可能创建二叉树。

但是你确实upon insertion时说upon insertion ,所以你可以将项目添加到列表的末尾,然后在调用树时对其进行排序。 喜欢这个:

 list.add(value); //Just add the item to the end call(); //This method would sort the list into a tree appropriately. 

此选项还允许您动态更改树的类型,因为您可以向call()添加一个指定树类型的参数。