好吧,我已经通读了所有其他相关的问题,但找不到一个对java有帮助的问题。我从我能用其他语言破译的东西中得到了大致的想法;但我还没有弄明白。
问题:我想要进行级别排序(我使用递归进行排序),并将其打印成树的一般形状。
因此,假设我有以下内容:
1
/ \
2 3
/ / \
4 5 6
我的代码输出的级别顺序如下:
1 2 3 4 5 6
我想像这样打印出来:
1
2 3
4 5 6
现在在你给我做关于工作的道德演讲之前。我已经完成了我的AP Comp Sci项目,当我的老师提到广度优先搜索时,我对此感到好奇。
我不知道它是否会有帮助,但到目前为止我的代码如下:
/**
* Calls the levelOrder helper method and prints out in levelOrder.
*/
public void levelOrder()
{
q = new QueueList();
treeHeight = height();
levelOrder(myRoot, q, myLevel);
}
/**
* Helper method that uses recursion to print out the tree in
* levelOrder
*/
private void levelOrder(TreeNode root, QueueList q, int curLev)
{
System.out.print(curLev);
if(root == null)
{
return;
}
if(q.isEmpty())
{
System.out.println(root.getValue());
}
else
{
System.out.print((String)q.dequeue()+", ");
}
if(root.getLeft() != null)
{
q.enqueue(root.getLeft().getValue());
System.out.println();
}
if(root.getRight() != null)
{
q.enqueue(root.getRight().getValue());
System.out.println();
curLev++;
}
levelOrder(root.getLeft(),q, curLev);
levelOrder(root.getRight(),q, curLev);
}
据我所知,我将需要使用树的总高度,并使用水平计数器…唯一的问题是,当我的levelOrder使用递归遍历树时,我的级别计数器仍在计数。
抱歉,如果这是太多,但一些提示将是很好的。:)
发布于 2012-09-19 16:50:28
这是代码,这个问题是在一次面试中问到我的…
public void printTree(TreeNode tmpRoot) {
Queue<TreeNode> currentLevel = new LinkedList<TreeNode>();
Queue<TreeNode> nextLevel = new LinkedList<TreeNode>();
currentLevel.add(tmpRoot);
while (!currentLevel.isEmpty()) {
Iterator<TreeNode> iter = currentLevel.iterator();
while (iter.hasNext()) {
TreeNode currentNode = iter.next();
if (currentNode.left != null) {
nextLevel.add(currentNode.left);
}
if (currentNode.right != null) {
nextLevel.add(currentNode.right);
}
System.out.print(currentNode.value + " ");
}
System.out.println();
currentLevel = nextLevel;
nextLevel = new LinkedList<TreeNode>();
}
}
发布于 2012-12-07 23:39:56
这是最简单的解决方案
public void byLevel(Node root){
Queue<Node> level = new LinkedList<>();
level.add(root);
while(!level.isEmpty()){
Node node = level.poll();
System.out.print(node.item + " ");
if(node.leftChild!= null)
level.add(node.leftChild);
if(node.rightChild!= null)
level.add(node.rightChild);
}
}
https://github.com/camluca/Samples/blob/master/Tree.java在我的github中,你可以在类树中找到其他有用的函数,比如:
显示树
****......................................................****
42
25 65
12 37 43 87
9 13 30 -- -- -- -- 99
****......................................................****
Inorder traversal
9 12 13 25 30 37 42 43 65 87 99
Preorder traversal
42 25 12 9 13 37 30 65 43 87 99
Postorder traversal
9 13 12 30 37 25 43 99 87 65 42
By Level
42 25 65 12 37 43 87 9 13 30 99
发布于 2010-02-11 09:04:47
下面是我会怎么做:
levelOrder(List<TreeNode> n) {
List<TreeNode> next = new List<TreeNode>();
foreach(TreeNode t : n) {
print(t);
next.Add(t.left);
next.Add(t.right);
}
println();
levelOrder(next);
}
(最初是真正的代码-中途感到无聊,所以它是伪代码)
https://stackoverflow.com/questions/2241513
复制相似问题