1

levelOrder方法需要递归调用自身来执行级别顺序遍历。我在如何将(这个)添加到累加器时遇到了麻烦。这就是我到目前为止所拥有的。

public class BinaryTreeNode<T> {
    private BinaryTreeNode<T> left;
    private BinaryTreeNode<T> right;
    private T data;

    public BinaryTreeNode() {
        this(null, null, null);
    }

    public BinaryTreeNode(T theData) {
        this(theData, null, null);
    }

    public BinaryTreeNode(T theData, BinaryTreeNode<T> leftChild,
            BinaryTreeNode<T> rightChild) {
        data = theData;

        left = leftChild;
        right = rightChild;
    }

    public void levelOrder(
            SortedMap<Integer, List<BinaryTreeNode<T>>> accumulator, int depth) {

        accumulator.put(depth, this);// add (this) to accumulator

        if (left != null) {
            left.levelOrder(accumulator, depth);// if (left) is not null invoke
                                                // this method for left
        }
        if (right != null) {
            right.levelOrder(accumulator, depth);// do the same for (right)
        }

    }
}
4

1 回答 1

0

UAB CS 302?好的,我是这样做的:

您必须检查累加器是否包含(此)节点当前深度的键。

两种可能性: a.) 累加器不包含表示该节点深度的键,因此您必须创建一个新的二叉树节点列表并将其添加到累加器中。b.) 累加器已经有一个表示该节点深度的键,因此您必须检索已经存在的二叉树节点列表,并将该特定节点添加到该列表中。

此外,如果左右节点不为空,那么您希望在 (depth+1) 处递归调用此方法,因为它们在树上比当前节点低。

于 2013-04-23T15:18:02.423 回答