1.先序遍历 加-左-右
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> temp = new ArrayList<>();
if (root == null) {
return temp;
}
DFS(root, temp);
return temp;
}
private void DFS(TreeNode root, List<Integer> temp) {
temp.add(root.val);
if (root.left != null) {
DFS(root.left, temp);
}
if (root.right != null) {
DFS(root.right, temp);
}
}
}
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ans = new LinkedList<>();
if (root == null) {
return ans;
}
Stack<TreeNode> data = new Stack<>();
TreeNode temp = root;
while (!data.isEmpty() || temp != null) {
while (temp != null) {
ans.add(temp.val);
data.push(temp);
temp = temp.left;
}
temp = data.pop();
temp = temp.right;
}
return ans;
}
}
2.中序遍历 左-加-右
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> temp = new ArrayList<>();
if (root == null) {
return temp;
}
DFS(root, temp);
return temp;
}
private void DFS(TreeNode root, List<Integer> temp) {
if (root.left != null) {
DFS(root.left, temp);
}
temp.add(root.val);
if (root.right != null) {
DFS(root.right, temp);
}
}
}
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new LinkedList<>();
if (root == null) {
return ans;
}
Stack<TreeNode> data = new Stack<>();
TreeNode temp = root;
while (!data.isEmpty() || temp != null) {
while (temp != null) {
data.push(temp);
temp = temp.left;
}
temp = data.pop();
ans.add(temp.val);
temp = temp.right;
}
return ans;
}
}
3.后序遍历 左-右-加
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> temp = new ArrayList<>();
if (root == null) {
return temp;
}
DFS(root, temp);
return temp;
}
private void DFS(TreeNode root, List<Integer> temp) {
if (root.left != null) {
DFS(root.left, temp);
}
if (root.right != null) {
DFS(root.right, temp);
}
temp.add(root.val);
}
}
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
if (root == null)
return list;
Stack<TreeNode> s1 = new Stack<>();
Stack<TreeNode> s2 = new Stack<>();
s1.push(root);
while (!s1.isEmpty()) {
root = s1.pop();
s2.push(root);
if (root.left != null) {
s1.push(root.left);
}
if (root.right != null) {
s1.push(root.right);
}
}
while (!s2.isEmpty()) {
list.add(s2.pop().val);
}
return list;
}
}