Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的二进制搜索树遍历(输出不正确)_Java_Binary Search Tree_Preorder_Postorder - Fatal编程技术网

Java中的二进制搜索树遍历(输出不正确)

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

我正在BST上工作,现在正在尝试树遍历。我的顺序遍历输出按预顺序正确,顺序后输出不正确。我的代码是

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。谢谢你的帮助!这些事情发生在一开始。我第一次写一棵树时,它不断地删除自己,我花了几个小时才弄明白原因。