0

私は 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

.

どこが間違っているのかわかりません。

4

1 に答える 1

1

プレオーダーとポストオーダーはどちらも、最初の電話ではプレオーダー/ポストオーダーのみです。その後、順番に移動します。

関数を順番どおりにではなく、自分自身を再帰的に呼び出すように変更してみてください。

于 2014-02-01T03:18:03.597 に答える