前序遍历
遍历顺序: 先根节点,然后左孩子,最后右孩子
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
if(root == null)
return list;
Stack <TreeNode> stack = new Stack();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
list.add(curr.val);
curr = curr.left;
}
curr = stack.pop();
curr = curr.right;
}
return list;
}
中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
List <Integer> res = new ArrayList();
Stack <TreeNode> stack = new Stack();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
res.add(curr.val);
curr = curr.right;
}
return res;
}
后序遍历
public List<Integer> postorderTraversal(TreeNode root) {
LinkedList<Integer> list = new LinkedList();
Stack <TreeNode> stack = new Stack();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
list.addFirst(curr.val);
curr = curr.right;
}
curr = stack.pop();
curr = curr.left;
}
return list;
}
层次遍历
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList();
if(root == null){
return list;
}
Queue<TreeNode> queue = new ArrayDeque();
queue.offer(root);
while(!queue.isEmpty()){
//获取当前层的节点数
int levelNum = queue.size();
List<Integer> subList = new ArrayList();
for (int i = 0; i < levelNum; i++) {
TreeNode node = queue.poll();
subList.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
list.add(subList);
}
return list;
}