我想知道是否还有其他最佳解决方案。
问题:鉴于二叉树中的节点,我需要编写一个程序来查找与给定节点(包括)相同级别的所有节点。示例:如果给定节点属于级别2,则程序应返回高度为2的所有节点的集合。
我的解决方案:我有两个方法,一个用于查找给定节点的根并返回根(此方法还可以从节点找到高度(我的代码中的高度))根)和这个根被送到第二个方法进行广度优先搜索并在我遍历时保持更新节点的高度,以及队列中第一个元素的高度是否等于我在根方法中计算的高度,然后我返回队列。
我的代码:
import java.util.LinkedList;
import java.util.Queue;
public class binaryTree {
int value;
binaryTree left;
binaryTree right;
binaryTree parent;
int height;
static int bheight;
Queue<binaryTree> que = new LinkedList<binaryTree>();
public binaryTree(int v) {
value = v;
}
//This method returns a Queue of all the nodes that are on the same level as the supplied node b.
public Queue<binaryTree> BFS(binaryTree b) {
b = root(b);
que.clear();
b.height=0;
que.add(b);
while (!que.isEmpty()) {
binaryTree node = que.remove();
if (node.left != null) {
node.left.height=(node.left.parent.height)+1;
System.out.println(node.left.value+" Root is "+node.left.parent.value+" and its height is " + node.left.height);
que.add(node.left);
}
if (node.right != null) {
node.right.height=(node.right.parent.height)+1;
System.out.println(node.right.value+" Root is "+node.right.parent.value+" and its height is " + node.left.height);
que.add(node.right);
}
if(que.peek().height==bheight)
{
break;
}
}
return que;
}
//Finds out the root of the given node and returns the root node
public binaryTree root(binaryTree t) {
if (t.parent == null) {
return t;
} else {
bheight++;
return root(t.parent);
}
} }