类似遍历二叉树的函数
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
功能中。
我有一个二叉树
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
功能中。