在前面的文章中,我已经降讲到了二叉树的前中后序的概念与结构,这里我带大家来实现一下领扣中二叉树的前中后序遍历代码:
一、前序遍历
/**
* 二叉树的前序遍历;
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
public class Preorder {
List<Integer> list = new ArrayList<>();
public List<Integer> Preorder(TreeNode root){
if (root == null)
return Collections.EMPTY_LIST;
list.add(root.val);
Preorder(root.left);
Preorder(root.right);
return list;
}
}
二、中序遍历(两个方法)
/**
* 二叉树的中序遍历
*/
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.util.Collections;
class TreeNode1{
int val;
TreeNode1 left;
TreeNode1 right;
public TreeNode1(int val) {
this.val = val;
}
}
//1.栈实现
public class inorder {
public List<Integer> inorder(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (cur != null || !stack.isEmpty()) {
if (cur != null) {
stack.push(cur);
cur = cur.left;
} else {
cur = stack.pop();
list.add(cur.val);
cur = cur.right;
}
}
return list;
}
//2.指定根节点root,遍历用list集合实现:
List<Integer> list = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null){
return Collections.emptyList();
}
list.add(root.val);
preorderTraversal(root.left);
preorderTraversal(root.right);
return list;
}
}
三、后序遍历
/**
* 二叉树的g=后序遍历;
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class TreeNode3{
int val;
TreeNode3 left;
TreeNode3 right;
public TreeNode3(int val) {
this.val = val;
}
}
public class Postorder {
List<Integer> list = new ArrayList<>();
public List<Integer> Preorder(TreeNode root){
if (root == null)
return Collections.EMPTY_LIST;
Preorder(root.left);
Preorder(root.right);
list.add(root.val);
return list;
}
}