看代码即可
/**
* 前序遍历,递归实现
*/
public void preOrder(TreeNode node){
if(node != null){
System.out.println(node.val);
preOrder(node.left);
preOrder(node.right);
}
}
/**
* 中序遍历,递归实现
*/
public void inOrder(TreeNode node){
if(node != null){
inOrder(node.left);
System.out.println(node.val);
inOrder(node.right);
}
}
/**
* 后序遍历,递归实现
*/
public void backOrder(TreeNode node){
if(node != null){
backOrder(node.left);
backOrder(node.right);
System.out.println(node.val);
}
}
/**
* 深度优先遍历(使用栈的先进后出特性,将右子树先压栈
*/
public void depthOrder(){
if(root == null){
System.out.println("empty tree!");
return;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while(stack.isEmpty() == false){
TreeNode node = stack.pop();
System.out.println(node.val + " ");
if(node.right != null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
}
System.out.println();
}
/**
* 广度优先遍历,使用队列实现
*/
public void levelOrder(){
if(root == null){
System.out.println("empty tree");
return;
}
ArrayDeque<TreeNode> queue = new ArrayDeque<TreeNode>();
queue.add(root);
while(queue.isEmpty() == false){
TreeNode node = queue.remove();
System.out.println(node.val + " ");
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
System.out.println();
}