[英]BST level order traversal
我想以水平順序遍歷打印出 BST。 但是我以這種奇怪的方式得到了 output。 此外,我使用 Java Visualizer 來檢查我的算法並且沒有任何線索,因為 Visualizer 沒有說明多個實例。 我在想,要么是我的變量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("]");
}
}
這是 output:
我將您的 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;
}
這是不必要的:
ArrayList<ArrayList<Integer>> solution = new ArrayList<ArrayList<Integer>>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.