1.前序遍历
public class preOrder {
public void preOrder(TreeNode root){
if(root == null)
return;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()) {
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);
}
}
public void preOrder1(TreeNode root){
if(root == null)
return;
System.out.println(root.val);
preOrder1(root.left);
preOrder1(root.right);
}
}
2.中序遍历
public class inOrder {
public void inOrder(TreeNode root){
if(root == null)
return;
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while(!stack.isEmpty() || cur != null) {
while(cur != null) {
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
System.out.println(cur.val);;
cur = cur.right;
}
}
public void inOrder1(TreeNode root){
if(root == null)
return;
inOrder1(root.left);
System.out.println(root.val);
inOrder1(root.right);
}
}
3.后序遍历
public class postOrder {
public static void postOrder(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode cur = root;
TreeNode lastVisit = root;
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
cur = stack.peek();
if (cur.right == null || cur.right == lastVisit) {
System.out.print(cur.val + " ");
stack.pop();
lastVisit = cur;
cur = null;
} else {
cur = cur.right;
}
}
}
public void postOrder1(TreeNode root){
if(root == null)
return;
postOrder1(root.left);
postOrder1(root.right);
System.out.println(root.val);
}
}
4.层序遍历
public class levelOrder {
public void levelOrder(TreeNode root) {
if(root == null)
return;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
TreeNode node = queue.poll();
System.out.println(node.val);
if(node.left != null)
queue.offer(node.left);
if(node.right != null)
queue.offer(node.right);
}
}
}
递归方法
class Solution {
List<List<Integer>> levels = new ArrayList<List<Integer>>();
public void helper(TreeNode node, int level) {
if(node == null) return;
if (levels.size() == level)
levels.add(new ArrayList<Integer>());
levels.get(level).add(node.val);
helper(node.left, level + 1);
helper(node.right, level + 1);
}
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) return levels;
helper(root, 0);
return levels;
}
}