目录
一、二叉树的前序遍历
144.二叉树的前序遍历
方法一:
class Solution {
List <Integer> tmp = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null){
return tmp;
}
tmp.add(root.val);
preorderTraversal(root.left);
preorderTraversal(root.right);
return tmp;
}
}
方法二:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List <Integer> tmp = new ArrayList<>();
if(root == null){
return tmp;
}
tmp.add(root.val);
List<Integer> leftTree = preorderTraversal(root.left);
tmp.addAll(leftTree);
List<Integer> rightTree = preorderTraversal(root.right);
tmp.addAll(rightTree);
return tmp;
方法三:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while(cur != null ||!stack.isEmpty()){
while(cur != null){
stack.push(cur);
// System.out.print(cur.val);
list.add(cur.val);
cur = cur.left;
}
TreeNode top = stack.pop();
cur = top.right;
}
return list;
}
}
二、二叉树的中序遍历
94.二叉树的中序遍历
方法一:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List <Integer> tmp = new ArrayList<>();
if(root == null){
return tmp;
}
List <Integer> leftTree = inorderTraversal(root.left);
tmp.addAll(leftTree);
tmp.add(root.val);
List <Integer> rightTree = inorderTraversal(root.right);
tmp.addAll(rightTree);
return tmp;
}
方法二:
class Solution {
List <Integer> tmp = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root == null) return tmp;
inorderTraversal(root.left);
tmp.add(root.val);
inorderTraversal(root.right);
return tmp;
}
}
方法三:非递归的方法
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
List<Integer> tmp = new ArrayList<>();
TreeNode cur = root;
while(cur != null || !stack.isEmpty()){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
TreeNode top = stack.pop();
tmp.add(top.val);
cur = top.right;
}
return tmp;
}
}
三、二叉树的后序遍历
145.二叉树的后序遍历
方法一:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List <Integer> tmp = new ArrayList<>();
if(root == null){
return tmp;
}
List <Integer> leftTree = postorderTraversal(root.left);
tmp.addAll(leftTree);
List <Integer> rightTree = postorderTraversal(root.right);
tmp.addAll(rightTree);
tmp.add(root.val);
return tmp;
}
}
方法二:
class Solution {
List<Integer> tmp = new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root == null) return tmp;
postorderTraversal(root.left);
postorderTraversal(root.right);
tmp.add(root.val);
return tmp;
}
}
方法三:非递归方法实现后序遍历
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<