有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用递归的java二叉搜索树遍历

我对使用递归和返回进行二叉搜索树遍历有疑问。我必须采取一个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;
}

共 (2) 个答案

  1. # 1 楼答案

    这些行只是为节点交换左、右子树。由于对该方法的递归调用,在执行该方法时,每个节点都交换了左子树和右子树

    BSTNode<T> ptr = root.left;
    root.left = root.right;
    root.right = ptr;
    
  2. # 2 楼答案

    检查以下代码的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;
    }