这里的二叉树不是特殊的二叉树,只是一个普通的二叉树
广度优先其实就是一层一层的搜索,第一层遍历完再遍历第二层(用队列实现)
深度优先其实就是一条分叉路先走到底,再返回一级走另一个分叉路(用栈实现)
广度优先(用队列实现)
也叫层序遍历
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Test {
void Print(TreeNode pRoot) {
ArrayList<TreeNode> list = new ArrayList<TreeNode>();
Queue<TreeNode> qu = new LinkedList<TreeNode>();
qu.offer(pRoot);
TreeNode t1 = null;
while(!qu.isEmpty()){
t1 = qu.poll();
list.add(t1);
if(t1.left!=null) {
qu.offer(t1.left);
}
if(t1.right!=null) {
qu.offer(t1.right);
}
}
}
}
队列实现图就像下面这样
之后再循环…
深度优先(用栈来实现)
也叫前序遍历
import java.util.ArrayList;
import java.util.Stack;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Test {
void Print(TreeNode pRoot) {
ArrayList<TreeNode> list = new ArrayList<TreeNode>();
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.add(pRoot);
TreeNode t1=null;
while (!stack.isEmpty()) {
t1 = stack.pop();
list.add(t1);
if(t1.right != null) {
stack.add(t1.right);
}
if(t1.left != null) {
stack.add(t1.left);
}
}
}
}
栈实现深度优先的示例图
上面的右节点和左节点的位置应该是先进右节点后进左节点,这样会先出左节点
成下面这样的图
剩下的就是循环又循环