Java中的二进制搜索树遍历(输出不正确)
我正在BST上工作,现在正在尝试树遍历。我的顺序遍历输出按预顺序正确,顺序后输出不正确。我的代码是Java中的二进制搜索树遍历(输出不正确),java,binary-search-tree,preorder,postorder,Java,Binary Search Tree,Preorder,Postorder,我正在BST上工作,现在正在尝试树遍历。我的顺序遍历输出按预顺序正确,顺序后输出不正确。我的代码是 public class binarytree { static class Node{ Node left; Node right; int value; public Node(int value) { this.value = value; this.left = null; this.ri
public class binarytree {
static class Node{
Node left;
Node right;
int value;
public Node(int value)
{
this.value = value;
this.left = null;
this.right = null;
}
}
public void creatBST()
{
Node root = new Node(4);
System.out.println("Binary Search tree with root = "+ root.value);
insert(root,1);
insert(root,2);
insert(root,3);
insert(root,6);
insert(root,5);
insert(root,7);
//insert(root,1);
System.out.println("Binary Search Tree in In Order Traversal is:");
printInOrder(root);
System.out.println("Binary Search Tree in Pre Order Traversal is:");
printPreOrder(root);
System.out.println("Binary Search Tree in Post Order Traversal is:");
printPostOrder(root);
}
public void insert(Node node, int value)
{
if(value < node.value)
{
if(node.left != null)
{
insert(node.left, value);
}
else
node.left = new Node(value);
}
else if(value > node.value)
{
if(node.right != null)
{
insert(node.right, value);
}
else
node.right = new Node(value);
}
}
public void printInOrder(Node node) //In Order Traversal
{
//Node node = this;
if(node != null)
{
//System.out.println("Binary Search Tree in In Order Traversal is:");
printInOrder(node.left);
System.out.println(node.value);
printInOrder(node.right);
}
}
public void printPreOrder(Node node) // Pre Order Traversal
{
//Node node = this;
if(node != null)
{
//System.out.println("Binary Search Tree in In Order Traversal is:");
System.out.println(node.value);
printInOrder(node.left);
printInOrder(node.right);
}
}
public void printPostOrder(Node node) // Post Order traversal
{
//Node node = this;
if(node != null)
{
//System.out.println("Binary Search Tree in In Order Traversal is:");
printInOrder(node.left);
printInOrder(node.right);
System.out.println(node.value);
}
}
public static void main(String args [])
{
binarytree obj = new binarytree();
obj.creatBST();
//obj.printInOrder();
}
}
公共类二进制树{
静态类节点{
左淋巴结;
节点权;
int值;
公共节点(int值)
{
这个值=值;
this.left=null;
this.right=null;
}
}
公共无效创建BST()
{
节点根=新节点(4);
System.out.println(“根为=“+root.value”)的二叉搜索树);
插入(根,1);
插入(根,2);
插入(根,3);
插入(根,6);
插入(根,5);
插入(根,7);
//插入(根,1);
println(“按遍历顺序排列的二叉搜索树为:”);
打印顺序(根);
System.out.println(“预先顺序遍历中的二叉搜索树为:”);
打印预订单(根);
println(“后序遍历中的二叉搜索树为:”);
打印邮购(根);
}
公共void插入(节点,int值)
{
if(值<节点值)
{
if(node.left!=null)
{
插入(node.left,值);
}
其他的
node.left=新节点(值);
}
else if(值>节点值)
{
if(node.right!=null)
{
插入(node.right,value);
}
其他的
node.right=新节点(值);
}
}
public void printInOrder(Node Node)//顺序遍历
{
//Node=this;
如果(节点!=null)
{
//println(“按遍历顺序排列的二叉搜索树为:”);
printInOrder(node.left);
System.out.println(节点值);
printInOrder(node.right);
}
}
public void printproorder(Node Node)//预订单遍历
{
//Node=this;
如果(节点!=null)
{
//println(“按遍历顺序排列的二叉搜索树为:”);
System.out.println(节点值);
printInOrder(node.left);
printInOrder(node.right);
}
}
public void printPostOrder(节点)//后序遍历
{
//Node=this;
如果(节点!=null)
{
//println(“按遍历顺序排列的二叉搜索树为:”);
printInOrder(node.left);
printInOrder(node.right);
System.out.println(节点值);
}
}
公共静态void main(字符串参数[])
{
binarytree obj=新的binarytree();
obj.createbst();
//对象printInOrder();
}
}
在预排序中,我得到的输出是
4-1-2-3-5-6-7
那不是吗
4-1-2-3-6-5-7
。类似地,对于后订单输出也是如此
1-2-3-5-6-7-4
虽然它应该是
3-2-1-5-7-6-4
不知道我哪里弄错了。您的预订单和后订单都只是第一次通话中的预订单/后订单。 之后,您将按顺序移动到
尝试将您的函数更改为递归调用,而不是按顺序调用。学习使用调试器。我尝试过,但无法确定为什么无法纠正问题区域@SotiriosDelimanolis。谢谢你的帮助!这些事情发生在一开始。我第一次写一棵树时,它不断地删除自己,我花了几个小时才弄明白原因。