java - Java中的二叉搜索树遍历(输出不正确)

标签 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.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();
    }
}

在预购中,我得到的输出是

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

.

不知道哪里错了。

最佳答案

您的预购和后购都只是第一次通话中的预购/后购。 之后,您将按顺序移动。

尝试更改您的函数以递归调用自身而不是按顺序调用。

关于java - Java中的二叉搜索树遍历(输出不正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493660/

相关文章:

Java JSON 序列化和 JSONObject

java - 我将图像从一个目录复制到另一个目录,但它打开时显示为灰屏

algorithm - 从排序数字流生成平衡二叉搜索树的最佳方法

java - 在 Java 中从 preOrder 数组实现二叉搜索树重建?

binary-tree - 当中序遍历一棵树的结果是 E A C K F H D B G 时,前序等价物是多少?

java - 如何使用 Java 从另一个类调用方法

java - Camel-Kafka 安全协议(protocol) SASL_PLAINTEXT 不支持

java - 在java中获取二叉搜索树的根

java - NoSuchElementException : No line found when getting user input with scanner?

python - 二叉树前序遍历