类似遍历二叉树的函数

Similiar functions to traverse a binary tree

我有一个二叉树

     public class Node
    {
            int value;
            Node left;
            Node right;

            public Node getLeft() {
                return left;
            }

        public Node getRight() {
            return right;
        }

        public String getValue() {
            return value;
        }
    }

并且在 main 中我有一个遍历它的函数。 对于树

    5
   / \
  3   7
 / \
1   2

第一个创建一个具有广度优先遍历 (5,3,7,1,2) 的节点队列。 例如,节点的第二个 returns 值。 7 表示 2 号或 2 表示 4 号。

    private void queueOfTreaversed() {
        LinkedList<Node> queue = new LinkedList<Node>();
        if (root != null)
            queue.add(root);

        while (!queue.isEmpty()) {
            Node temp = queue.removeFirst();
            if (temp.getLeft() != null && temp.getRight() != null) {
                traversed.add(temp);    //there is a difference
                queue.add(temp.getLeft());
                queue.add(temp.getRight());
            }
        }
    }

    public int getValue(int n) {
        LinkedList<Node> queue = new LinkedList<Node>();
        if (root != null)
            queue.add(root);

        while (!queue.isEmpty() && n>0) {
            Node temp = queue.removeFirst();
            if (temp.getLeft() != null && temp.getRight() != null) {
                queue.add(temp.getLeft());
                queue.add(temp.getRight());
            }
        }
        return queue.peekFirst().getValue();  //there is a difference
    }

而且我有重复的代码,我不知道如何摆脱。 我同时使用 traversed 并从此队列中弹出元素,因此元素不会按此顺序排列,并且无法使用 traversed。谁能给点提示?

一旦你得到了traversed中的遍历节点,你的getValue(int n)函数实际上可以索引到traversed中以获得你想要的值。在您的 getValue(int n) 函数中,只需使用如下代码:

if (n < traversed.size()) {
    return traversed.get(n).getValue();
}
throw new Exception("Element not existed");

为了能够使用 traversed,只需 return 在您的 queueOfTreaversed 功能中。