4

我想我必须修改其中一个遍历。我尝试修改一个从最小到最大的打印,这就是这个

private void printTree(BinaryTreeNode t) {
    if (t != null) {
        printTree(t.llink);
        System.out.print(" " + t.info);
        printTree(t.rlink);
    }
}

但它没有用。我仍然坚持下一步我应该尝试什么。这是我正在使用的二叉搜索树:

public class BinarySearchTree extends BinaryTree {
    //Default constructor.
    //Postcondition: root = null;

    public BinarySearchTree() {
        super();
    }

    //Copy constructor.
    public BinarySearchTree(BinarySearchTree otherTree) {
        super(otherTree);
    }

public class BinaryTree {

    //Definition of the node
    protected class BinaryTreeNode {

        DataElement info;
        BinaryTreeNode llink;

        public DataElement getInfo() {
            return info;
        }

        public BinaryTreeNode getLlink() {
            return llink;
        }

        public BinaryTreeNode getRlink() {
            return rlink;
        }
        BinaryTreeNode rlink;
    }

    protected BinaryTreeNode root;

    //Default constructor
    //Postcondition: root = null;
    public BinaryTree() {
        root = null;
    }

    //Copy constructor
    public BinaryTree(BinaryTree otherTree) {
        if (otherTree.root == null) //otherTree is empty.
        {
            root = null;
        }
        else {
            root = copy(otherTree.root);
        }
    }

    public BinaryTreeNode getRoot() {
        return root;
    }
4

2 回答 2

2

您发布的代码看起来可以从最小到最大排序。

如果你想反过来排序,那么下面的代码应该可以工作:

private void printTree(BinaryTreeNode t) {
        if (t != null) {
            printTree(t.rlink);
            System.out.print(" " + t.info);
            printTree(t.llink);
        }
    }
于 2012-05-25T17:11:02.097 回答
0

您所要做的就是交换 llink 和 rlink。要从最大到最小打印树,您可以使用其中一种树遍历方法。例如,适合这种情况的是 Inorder 遍历,因为它根据值从最小到最大打印树。您所要做的就是:

if(t!=null){        
    printTree(t.rlink);
    System.out.print(" " + t.info);
    printTree(t.llink);
}

那应该从最大到最小打印它。

于 2014-01-17T05:59:20.287 回答