递归不会在先序遍历中停止
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());
}
}
我正在编写一个递归程序来遍历 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());
}
}