深度优先算法
二叉树中的深度优先算法就是先序遍历
代码如下:
public void N(Node head){
Stack stack = new Stack<Node>();
stack.push(head);
while(!stack.isEmpty()){
Node help = stack.pop();
System.out.print(help.val + " ");
if(help.right != null){
stack.push(help.right);
}
if(help.left != null){
stack.push(help.left);
}
}
System.out.println();
}
广度优先算法
说白了就是一排一排的依次输出
代码如下:
public void f(Node head){
Queue queue = new LinkedList();
queue.add(head);
while(!queue.isEmpty()){
Node help = queue.poll();
System.out.print(help.val + " ");
if(help.left!= null){
queue.add(help.left);
}
if(help.right!= null){
queue.add(help.right);
}
}
System.out.println();
}
做一个扩展题把,上述广度优先算法的应用——算出二叉数那一层的数最多
代码如下:
public int f(Node head){
Queue queue = new LinkedList();
queue.add(head);
HashMap<Node , Integer> hashMap = new HashMap();
hashMap.put(head , 1);
int lever = 1;
int Nodes = 0;
int max = Integer.MIN_VALUE;
while(!queue.isEmpty()){
Node help = queue.poll();
int curLever = hashMap.get(help);
if(curLever == lever){
Nodes++;
max = Math.max(max , Nodes);
}else{
lever++;
Nodes = 1;
}
if(help.left!= null){
hasMap.put(help.left , lever+1)
queue.add(help.left);
}
if(help.right != null){
hasMap.put(help.right, lever+1)
queue.add(help.right);
}
}
System.out.println();
return max;
}