先序遍历二叉树
class Solution{
// 递归实现方式
void preOrder(TreeNode root){
if(root == null) return;
System.out.println(root.val);
preOrder(root.left);
preOrder(root.right);
}
// 非递归实现方式
void preOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(node != null || !stack.empty()){
if(node != null){
System.out.println(node.val);
stack.push(node);
node = node.left;
}else{
TreeNode temp = stack.pop();
node = temp.right;
}
}
}
}
中序遍历二叉树
class Soultion{
// 递归遍历
void midOrder(TreeNode root){
if(root == null) return ;
midOrder(root.left);
System.out.println(root.val);
midOrder(root.right);
}
// 非递归遍历
void midOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(node != null || !stack.empty()){
if(node != null){
stack.push(node);
node = node.left;
}else{
TreeNode temp = stack.pop();
System.out.println(temp.val);
node = temp.right;
}
}
}
}
后序遍历二叉树
class Solution{
// 递归遍历
void postOrder(TreeNode root){
if(root == null) retun ;
postOrder(root.left);
postOrder(root.right);
System.out.println(root.val);
}
// 非递归遍历
/**
交换二叉树左右节点生成的二叉树的先序遍历是二叉树后续遍历的逆序输出。
**/
void postOrder(TreeNode root){
Stack<TreeNode> src = new Stack<>();
Stack<TreeNode> res = new Stack<>();
src.push(root);
while(!src.empty()){
TreeNode node = src.pop();
res.push(node);
if(node.left != null){
src.push(node.left);
}
if(node.right != null){
src.push(node.right);
}
}
while(!res.empty()){
System.out.println(res.pop());
}
}
}
层次遍历二叉树
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null) return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
list.add(node.val);
}
return list;
}
}