用队列和栈分别作二叉树的bfs和dfs
树的代码:TreeNode
public class TreeNode {
TreeNode left;
TreeNode right;
int val;
public TreeNode(TreeNode left,TreeNode right,int val) {
this.left = left;
this.right = right;
this.val = val;
}
public boolean hasLeft() {
return this.left != null;
}
public boolean hasRight() {
return this.right!= null;
}
public int getVal() {
return this.val;
}
public TreeNode getLeft() {
return left;
}
public TreeNode getRight() {
return right;
}
}
使用队列做bfs:
public static Queue<TreeNode> bfs(TreeNode node,Queue<TreeNode> queue) {
queue.add(node);
while(!queue.isEmpty()) {
TreeNode tmp = queue.poll();
System.out.println(tmp.getVal());
if(tmp.hasLeft() && tmp.hasRight()) {
queue.add(tmp.getLeft());
queue.add(tmp.getRight());
}else if(tmp.hasLeft()){
queue.add(tmp.getLeft());
}else if(tmp.hasRight()) {
queue.add(tmp.getRight());
}
}
return queue;
}
使用栈做dfs:
public static Stack<TreeNode> dfs(TreeNode node,Stack<TreeNode> stack){
stack.push(node);
while (!stack.isEmpty()){
TreeNode tmp = stack.pop();
System.out.println(tmp.getVal());
if(tmp.hasLeft() && tmp.hasRight()) {
stack.push(tmp.getLeft());
stack.push(tmp.getRight());
}else if(tmp.hasLeft()){
stack.push(tmp.getLeft());
}else if(tmp.hasRight()) {
stack.push(tmp.getRight());
}
}
return stack;
}
主方法:
public static void main(String[] args) {
TreeNode node1 = new TreeNode(null, null, 4);
TreeNode node2 = new TreeNode(null, null, 5);
TreeNode node3 = new TreeNode(null, null, 6);
TreeNode node4 = new TreeNode(null, null, 7);
TreeNode node5 = new TreeNode(node1, node2, 2);
TreeNode node6 = new TreeNode(node3, node4, 3);
TreeNode head = new TreeNode(node5, node6, 1);
//树的结构是:1(2(4,5),3(6,7))
Queue<TreeNode> queue = new LinkedList<>();
m.bfs(head, queue);
Stack<TreeNode> stack = new Stack<>();
Dfs.dfs(head, stack);
}