Inorder tree traversal: Which definition is correct?

前端 未结 14 1238
轮回少年
轮回少年 2020-12-24 03:42

I have the following text from an academic course I took a while ago about inorder traversal (they also call it pancaking) of a binary tree (not BST):

相关标签:
14条回答
  • 2020-12-24 04:21

    package datastructure;

    public class BinaryTreeTraversal {

    public static Node<Integer> node;
    
    public static Node<Integer> sortedArrayToBST(int arr[], int start, int end) {
        if (start > end)
            return null;
    
        int mid = start + (end - start) / 2;
        Node<Integer> node = new Node<Integer>();
        node.setValue(arr[mid]);
    
        node.left = sortedArrayToBST(arr, start, mid - 1);
        node.right = sortedArrayToBST(arr, mid + 1, end);
        return node;
    }
    
    public static void main(String[] args) {
    
        int[] test = new int[] { 1, 2, 3, 4, 5, 6, 7 };
        Node<Integer> node = sortedArrayToBST(test, 0, test.length - 1);
    
        System.out.println("preOrderTraversal >> ");
    
        preOrderTraversal(node);
    
        System.out.println("");
    
        System.out.println("inOrderTraversal >> ");
    
        inOrderTraversal(node);
    
        System.out.println("");
    
        System.out.println("postOrderTraversal >> ");
    
        postOrderTraversal(node);
    
    }
    
    public static void preOrderTraversal(Node<Integer> node) {
    
        if (node != null) {
    
            System.out.print(" " + node.toString());
            preOrderTraversal(node.left);
            preOrderTraversal(node.right);
        }
    
    }
    
    public static void inOrderTraversal(Node<Integer> node) {
    
        if (node != null) {
    
            inOrderTraversal(node.left);
            System.out.print(" " + node.toString());
            inOrderTraversal(node.right);
        }
    
    }
    
    public static void postOrderTraversal(Node<Integer> node) {
    
        if (node != null) {
    
            postOrderTraversal(node.left);
    
            postOrderTraversal(node.right);
    
            System.out.print(" " + node.toString());
        }
    
    }
    

    }

    package datastructure;

    public class Node {

    E value = null;
    Node<E> left;
    Node<E> right;
    
    public E getValue() {
        return value;
    }
    
    public void setValue(E value) {
        this.value = value;
    }
    
    public Node<E> getLeft() {
        return left;
    }
    
    public void setLeft(Node<E> left) {
        this.left = left;
    }
    
    public Node<E> getRight() {
        return right;
    }
    
    public void setRight(Node<E> right) {
        this.right = right;
    }
    
    @Override
    public String toString() {
        return " " +value;
    }
    

    }

    preOrderTraversal >> 4 2 1 3 6 5 7 inOrderTraversal >> 1 2 3 4 5 6 7 postOrderTraversal >> 1 3 2 5 7 6 4

    0 讨论(0)
  • 2020-12-24 04:26

    Both definitions give the same result. Don't be fooled by the letters in the first example - look at the numbers along the path. The second example does use letters to denote the path - perhaps that is what is throwing you off.

    For example, in your example order showing how you thought the second tree would be traversed using the algorithm of the first one, you place "D" after "B" but you shouldn't because there is still a left-hand child node of D available (that's why the first item says "the order in which this line passes underneath them."

    0 讨论(0)
提交回复
热议问题