Java 向二叉树中第一个未占用的叶添加元素
现在我正试图用Java编写一个二叉树结构上实现的二叉堆,虽然我对如何在添加元素后“heapify”树有很好的理解,但在堆底部查找第一个未占用的叶子的逻辑却让我摸不着头脑Java 向二叉树中第一个未占用的叶添加元素,java,heap,binary-tree,breadth-first-search,binary-heap,Java,Heap,Binary Tree,Breadth First Search,Binary Heap,现在我正试图用Java编写一个二叉树结构上实现的二叉堆,虽然我对如何在添加元素后“heapify”树有很好的理解,但在堆底部查找第一个未占用的叶子的逻辑却让我摸不着头脑 我知道查找第一个未占用的叶子应该是广度优先遍历,但我仍然不知道广度优先遍历算法到底是如何工作的。这就是广度优先搜索第一个空分支(然后插入分支)的样子。请注意,这与深度优先插入基本相同,只是它使用一个队列,深度优先插入使用堆栈 void breadthFirstInsert(Node root, Object obj) {
我知道查找第一个未占用的叶子应该是广度优先遍历,但我仍然不知道广度优先遍历算法到底是如何工作的。这就是广度优先搜索第一个空分支(然后插入分支)的样子。请注意,这与深度优先插入基本相同,只是它使用一个队列,深度优先插入使用堆栈
void breadthFirstInsert(Node root, Object obj) {
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
Node temp = queue.poll();
if(temp.left != null) {
queue.offer(temp.left);
} else {
temp.left = new Node(obj);
return;
}
if(temp.right != null) {
queue.offer(temp.right);
} else {
temp.right = new Node(obj);
return;
}
}
}
void breadthFirstInsert(节点根,对象对象对象){
Queue Queue=new LinkedList();
queue.offer(根);
而(!queue.isEmpty()){
Node temp=queue.poll();
如果(左侧温度!=null){
队列报价(临时左侧);
}否则{
左侧温度=新节点(obj);
返回;
}
如果(临时正确!=null){
排队报价(临时权利);
}否则{
右侧温度=新节点(obj);
返回;
}
}
}
谢谢!不过,我有点困惑。由于您只是将新节点添加到临时变量,这是否意味着它不会添加到原始树?它将添加到原始树,因为temp是指向树节点的引用的副本。例如,Node temp=root;temp.left=新节点(obj)
相当于root.left=新节点(obj)
<代码>节点温度=根;温度=左侧温度;temp.right=新节点(obj)相当于root.left.right=新节点(obj)