尝试打印时二进制搜索树的指针问题
Pointer issue with Binary Search tree when trying to print
我正在编写按顺序打印二叉搜索树的方法。我想出了一种方法来执行此操作,但它需要在打印时删除或取消节点。下面是我的代码:
public String printKeysInOrder() {
String output = "";
if (isEmpty()) return "()";
else{
int i = 0;
while(i!=size()){
Node x = root;
int loopBreak = 0;
while(loopBreak!=1){
if(x.left != null) x = x.left;
else if (x.right != null){
output = output + " " + x.val;
x.key = null;
x = x.right;
i++;
}
else{
output = output + " " + x.val;
x.key = null;
loopBreak = 1;
}
}
i++;
}
}
return output;
}
对于树:
_7_
/ \
_3_ 8
/ \
1 6
\ /
2 4
\
5
它应该打印“1 2 3 4 5 6 7 8”
代码的工作方式是它倾向于在树中向左移动,直到它不能再向左移动,然后它将该节点的值存储在字符串输出中,使节点键等于 null(未来的迭代也是如此)循环的 do not go down that tree) 并且如果可能的话向右移动或者绕着循环迭代回来。
尽管我无法使节点等于 null,因为当执行代码时(通过 junit 测试)代码不识别 null 键并通过该子树吗?任何人都可以帮助我或告诉我如何做到这一点,以便未来迭代中的 x.left 和 x.right 指针将节点识别为空吗?
您不需要取消或删除您需要遍历算法的节点。
此处提供的中序遍历无需大的修改即可工作:
http://www.javabeat.net/binary-search-tree-traversal-java/
另一种面向对象的方法是提供给有序遍历的访问者,它允许您提供在每个节点执行的操作,无论是打印、收集、映射还是其他。
我正在编写按顺序打印二叉搜索树的方法。我想出了一种方法来执行此操作,但它需要在打印时删除或取消节点。下面是我的代码:
public String printKeysInOrder() {
String output = "";
if (isEmpty()) return "()";
else{
int i = 0;
while(i!=size()){
Node x = root;
int loopBreak = 0;
while(loopBreak!=1){
if(x.left != null) x = x.left;
else if (x.right != null){
output = output + " " + x.val;
x.key = null;
x = x.right;
i++;
}
else{
output = output + " " + x.val;
x.key = null;
loopBreak = 1;
}
}
i++;
}
}
return output;
}
对于树:
_7_
/ \
_3_ 8
/ \
1 6
\ /
2 4
\
5
它应该打印“1 2 3 4 5 6 7 8”
代码的工作方式是它倾向于在树中向左移动,直到它不能再向左移动,然后它将该节点的值存储在字符串输出中,使节点键等于 null(未来的迭代也是如此)循环的 do not go down that tree) 并且如果可能的话向右移动或者绕着循环迭代回来。
尽管我无法使节点等于 null,因为当执行代码时(通过 junit 测试)代码不识别 null 键并通过该子树吗?任何人都可以帮助我或告诉我如何做到这一点,以便未来迭代中的 x.left 和 x.right 指针将节点识别为空吗?
您不需要取消或删除您需要遍历算法的节点。
此处提供的中序遍历无需大的修改即可工作: http://www.javabeat.net/binary-search-tree-traversal-java/
另一种面向对象的方法是提供给有序遍历的访问者,它允许您提供在每个节点执行的操作,无论是打印、收集、映射还是其他。