Q值。我对使用递归和返回的二进制搜索树遍历有疑问。我必须使用按升序排列的键来获取BST,然后反转"所以所有的键都按照降序排列,如图所示。
根据我对下面代码的理解,我认为步骤是:
->reverseKeys (10) ->reverseKeys (2)
->reverseKeys (null): return
->reversekeys(null): return
->BSTNODE <T> ptr = root.left;
->root.left = root.right;
->root.right = ptr;
我想我误解了代码。有人可以说明这段代码如何改变左边的图片吗?我将不胜感激任何帮助。
25 25
/ \ / \
10 40 ---> 40 10
/\ /\ / \ / \
2 20 30 45 45 30 20 2
/ \ / \
15 35 35 15
public static <T extends Comparable<T>>
void reverseKeys(BSTNode<T> root) {
if (root == null) {
return;
}
reverseKeys(root.left);
reverseKeys(root.right);
BSTNode<T> ptr = root.left;
root.left = root.right;
root.right = ptr;
}
答案 0 :(得分:1)
这些行只是为节点交换左右子树。并且由于对方法的递归调用,每个节点在执行方法时都会交换左右子树。
BSTNode<T> ptr = root.left;
root.left = root.right;
root.right = ptr;
答案 1 :(得分:0)
检查BST - 以下代码的反向顺序遍历(RVL)
public void traverse (Node root){ // Each child of a tree is a root of its subtree.
if (root.left != null){
traverse (root.left);
}
System.out.println(root.data);
if (root.right != null){
traverse (root.right);
}
}
// Search with a valid node returned, assuming int
public Node traverse (Node root, int data){ // What data are you looking for again?
if(root.data == data) {
return root;
}
if (root.left != null){
return traverse (root.left, data);
}
if (root.right != null){
return traverse (root.right, data);
}
return null;
}