首先,这个preOrder这个方法是用来遍历树的,貌似说了个废话,它需要一个
BinaryNode<E>p的参数,这个参数就是树上的一个节点。
首先,假如当前p是A,那么判断p是否为null,也就是是否有这个节点,如果有,那么打印p.data,应该是p的信息。
然后再次调用这个preOrder遍历树的方法preOrder(p.left);preOrder(p.right),但这此传入的节点已经不是A了,而是p.left和p.right,也就是B和C,然后依然跟上面一样,先判断是否有该节点,如果有就打印节点信息,然后再次调用该方法传入自己的左右孩子节点,一次递归循环,自己的左右孩子为null的时候,当然不会走if语句里面的内容,递归也就自然结束了
希望可以帮到LZ
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
测试类:package tree
import java.util.*
public class Test {
public static void main(String[] args){
List<Tree>trees=new ArrayList<Tree>()
int id=1
Tree tree1=new Tree(0,id++,"张三丰")
Tree tree2=new Tree(tree1.getId(),id++,"武当宋大侠宋远桥")
Tree tree3=new Tree(tree1.getId(),id++,"武当俞二侠俞莲舟")
Tree tree4=new Tree(tree1.getId(),id++,"武当俞三侠俞岱岩")
Tree tree5=new Tree(tree1.getId(),id++,"武当张四侠张松溪")
Tree tree6=new Tree(tree1.getId(),id++,"武当张五侠张翠山")
Tree tree7=new Tree(tree1.getId(),id++,"武当殷六侠殷梨亭")
Tree tree8=new Tree(tree1.getId(),id++,"武当莫七侠莫声谷")
Tree tree9=new Tree(tree6.getId(),id++,"明教张无忌")
Tree tree13=new Tree(tree2.getId(),id++,"叛徒宋青书")
Tree tree10=new Tree(0,id++,"任我行")
Tree tree11=new Tree(tree10.getId(),id++,"令狐冲")
Tree tree12=new Tree(tree10.getId(),id++,"任盈盈")
trees.add(tree1)
trees.add(tree2)
trees.add(tree3)
trees.add(tree4)
trees.add(tree5)
trees.add(tree6)
trees.add(tree7)
trees.add(tree8)
trees.add(tree9)
trees.add(tree10)
trees.add(tree11)
trees.add(tree12)
trees.add(tree13)
for(int i=0i<trees.size()i++){
Tree tree=trees.get(i)
if(tree.getParentId()==0){
tree.showChildTree(trees)
}
}
}
}
树类:
package tree
import java.util.List
public class Tree {
private int parentId
private int id
private String showStr
private String Spaces=""
public Tree() {
// TODO Auto-generated constructor stub
}
public Tree(int parentId,int id,String showStr){
this.parentId=parentId
this.id=id
this.showStr=showStr
}
public void showChildTree(List<Tree>trees){
if(parentId!=0){
trees.get(id-1).setSpaces(trees.get(parentId-1).getSpaces()+" ")
}
System.out.println(trees.get(id-1).getSpaces()+showStr)
for(int i=0i<trees.size()i++){
Tree tree=trees.get(i)
if(tree.getParentId()==id){
tree.showChildTree(trees)
}
}
}
public int getParentId() {
return parentId
}
public void setParentId(int parentId) {
this.parentId = parentId
}
public int getId() {
return id
}
public void setId(int id) {
this.id = id
}
public String getShowStr() {
return showStr
}
public void setShowStr(String showStr) {
this.showStr = showStr
}
public String getSpaces() {
return Spaces
}
public void setSpaces(String spaces) {
Spaces = spaces
}
}
控制台效果图:
张三丰
武当宋大侠宋远桥
叛徒宋青书
武当俞二侠俞莲舟
武当俞三侠俞岱岩
武当张四侠张松溪
武当张五侠张翠山
明教张无忌
武当殷六侠殷梨亭
武当莫七侠莫声谷
任我行
令狐冲
任盈盈