public class TreeNode {
private TreeNode leftNode
private TreeNode rightNode
private String nodeName
public TreeNode getLeftNode() {
return leftNode
}
public void setLeftNode(TreeNode leftNode) {
this.leftNode = leftNode
}
public TreeNode getRightNode() {
return rightNode
}
public void setRightNode(TreeNode rightNode) {
this.rightNode = rightNode
}
public String getNodeName() {
return nodeName
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName
}
public static int level=0
public static void findNodeByLevel(ArrayList<TreeNode>nodes){
if(nodes==null||nodes.size()==0){
return
}
level++
ArrayList<TreeNode>temp = new ArrayList()
for(TreeNode node:nodes){
System.out.println("第"+level+"层:"+node.getNodeName())
if(node.getLeftNode()!=null){
temp.add(node.getLeftNode())
}
if(node.getRightNode()!=null){
temp.add(node.getRightNode())
}
}
nodes.removeAll(nodes)
findNodeByLevel(temp)
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode root = new TreeNode()
root.setNodeName("root")
TreeNode node1 = new TreeNode()
node1.setNodeName("node1")
TreeNode node3 = new TreeNode()
node3.setNodeName("node3")
TreeNode node7 = new TreeNode()
node7.setNodeName("node7")
TreeNode node8 = new TreeNode()
node8.setNodeName("node8")
TreeNode node4 = new TreeNode()
node4.setNodeName("node4")
TreeNode node2 = new TreeNode()
node2.setNodeName("node2")
TreeNode node5 = new TreeNode()
node5.setNodeName("node5")
TreeNode node6 = new TreeNode()
node6.setNodeName("node6")
root.setLeftNode(node1)
node1.setLeftNode(node3)
node3.setLeftNode(node7)
node3.setRightNode(node8)
node1.setRightNode(node4)
root.setRightNode(node2)
node2.setLeftNode(node5)
node2.setRightNode(node6)
ArrayList<TreeNode>nodes = new ArrayList<TreeNode>()
nodes.add(root)
findNodeByLevel(nodes)
}
}
java Map 遍历一般有四种方式
方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
方式二: 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方式三:使用Iterator遍历
使用泛型:
不使用泛型:
你也可以在keySet和values上应用同样的方法。
方法四: 通过键找值遍历(效率低)
作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。
因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。
总结:
如果仅需要键(keys)或值(values)使用方法二。
如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。
否则使用方法一(键值都要)。
扩展资料:
类似的遍历算法:
二叉树的遍历算法
1、先(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴ 访问根结点;
⑵ 遍历左子树;
⑶ 遍历右子树。
2、中(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵访问根结点;
⑶遍历右子树。
3、后(根)序遍历得递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵遍历右子树;
⑶访问根结点。
参考资料:百度百科——Java