递归不会在先序遍历中停止

Recursion does not stop in Preorder Traversal

我正在编写一个递归程序来遍历 Preorder 中的二叉树。这是二叉树 class 定义

public class BinaryTree {

   private int data;
   private BinaryTree left,right;

   public BinaryTree(int data){
      this.data = data;
      this.left = null;
      this.right = null;
   }

   public int getData(){
      return data;
   }

   public BinaryTree getLeft() {
      return left;
   }

   public BinaryTree getRight() {
      return right;
   }

   public void setData(int data) {
      this.data = data;
   }

   public void setLeft(BinaryTree left) {
      this.left = left;
   }

   public void setRight(BinaryTree right) {
      this.right = right;
   }

}

这是我的测试程序

public class TreeTest {

   public static void main(String[] args){

      TreeTest treeTest = new TreeTest();
      treeTest.preTraversal(treeTest.getBinaryTree());
   }

   public void preTraversal(BinaryTree binaryTree){

      while(binaryTree!=null){
          System.out.println(binaryTree.getData()+" ");
          preTraversal(binaryTree.getLeft());
          preTraversal(binaryTree.getRight());
      }
   }

   //Tree creation 
   public BinaryTree getBinaryTree(){
       BinaryTree root = new BinaryTree(1);
       BinaryTree node2 = new BinaryTree(2);
       BinaryTree node3 = new BinaryTree(3);
       root.setLeft(node2);
       root.setRight(node3);
       return root;
   }

}

问题是程序永远不会停止。这是输出。

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

我猜你需要 IF 而不是 WHILE:

   public void preTraversal(BinaryTree binaryTree){
      if(binaryTree != null){
          System.out.println(binaryTree.getData()+" ");
          preTraversal(binaryTree.getLeft());
          preTraversal(binaryTree.getRight());
      }
   }

罪魁祸首是这条指令:

while(binaryTree!=null){

– 它一次又一次地测试 binaryTree 变量,但是变量永远不会改变,所以循环永远不会结束。

治愈方法:将while替换为if:

public void preTraversal(BinaryTree binaryTree){
   if(binaryTree!=null){
       System.out.println(binaryTree.getData()+" ");
       preTraversal(binaryTree.getLeft());
       preTraversal(binaryTree.getRight());
   }
}