[英]BST level order traversal
I wanted to print out the BST in level order traversal.我想以水平顺序遍历打印出 BST。 But I got the output in this wierd way.
但是我以这种奇怪的方式得到了 output。 Also, I used Java Visualizer to check my algorithm and had no clue since visualizer does not illustrate multiple instances.
此外,我使用 Java Visualizer 来检查我的算法并且没有任何线索,因为 Visualizer 没有说明多个实例。 I'm thinking that it is either my variable
tmp
is not added into my ArrayList
instance set
properly or set
is not added into ArrayList<ArrayList<Integer>> solution
properly.我在想,要么是我的变量
tmp
未正确添加到我的ArrayList
实例set
set
,要么未正确添加到ArrayList<ArrayList<Integer>> solution
。
import java.util.LinkedList;
import java.util.Queue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Arrays;
public class BSTordertraversal{
public static class TreeNode{
int value;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.value=value;
}
}
public static ArrayList<ArrayList<Integer>> levelOrder(TreeNode root){
HashMap<TreeNode,Integer> map = new HashMap<>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
ArrayList<Integer> set = new ArrayList<>();
ArrayList<ArrayList<Integer>> solution = new ArrayList<ArrayList<Integer>>();
queue.add(root);
int lastlvl = 0;
map.put(root,0);
if(root==null){
return solution;
}
int tmp;
while(queue.peek()!=null){
TreeNode current = queue.peek();
if(current.left!=null){
queue.add(current.left);
map.put(current.left, map.get(current)+1);
}
if(current.right!=null){
queue.add(current.right);
map.put(current.right, map.get(current)+1);
}
if(map.get(current)==lastlvl){
tmp = current.value;
set.add(tmp);
queue.remove();
}else if(map.get(current)>lastlvl){
solution.add(set);
set.clear();
tmp = current.value;
set.add(tmp);
lastlvl=map.get(current);
queue.remove();
}
}
return solution;
}
public static void main(String[] args) {
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
//root.left.left = new TreeNode(null);
//root.left.right= new TreeNode(null);
root.right.left = new TreeNode(15);
root.right.right= new TreeNode(7);
//root.right.right.right = new TreeNode(30);
ArrayList<ArrayList<Integer>> solution = levelOrder(root);
System.out.println("[");
for(int i=0;i<solution.size();i++){
System.out.print("[");
for(int x=0;x<solution.get(i).size();x++){
System.out.print(solution.get(i).get(x));
}
System.out.print("]");
}
System.out.println("");
System.out.println("]");
}
}
Here is the output:这是 output:
I'm slightly changing your function levelOrder
as:我将您的 function
levelOrder
稍微更改为:
public static ArrayList<Integer> levelOrder(TreeNode root){
Queue<TreeNode> queue=new LinkedList<TreeNode>();
ArrayList<Integer> levelOrderData = new ArrayList<>();
queue.add(root);
while(!queue.isEmpty())
{
TreeNode tempNode=queue.poll();
levelOrderData.add(tempNode.value);
if(tempNode.left!=null)
queue.add(tempNode.left);
if(tempNode.right!=null)
queue.add(tempNode.right);
}
return levelOrderData;
}
This is unnessesary:这是不必要的:
ArrayList<ArrayList<Integer>> solution = new ArrayList<ArrayList<Integer>>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.