- 二叉樹的前序、中序、後序遍歷實際上是深度優先遍歷(DFS)
- 二叉樹的層序遍歷實際上是廣度優先遍歷(BFS)
二叉樹的前序遍歷
前序遍歷:根結點 —> 左子樹 —> 右子樹
遞歸實現:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private List<Integer> res = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
if (root == null) return res;
if (root != null) {
res.add(root.val);
}
if (root.left != null) {
preorderTraversal(root.left);
}
if (root.right != null) {
preorderTraversal(root.right);
}
return res;
}
}
對應於leetcode144
二叉樹的中序遍歷
中序遍歷:左子樹—> 根結點 —> 右子樹
遞歸實現:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private List<Integer> res = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if (root == null) return res;
if (root.left != null) {
inorderTraversal(root.left);
}
if (root != null) {
res.add(root.val);
}
if (root.right != null) {
inorderTraversal(root.right);
}
return res;
}
}
對應於leetcode94
二叉樹的後序遍歷
後序遍歷:左子樹 —> 右子樹 —> 根結點
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private List<Integer> res = new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if (root == null) return res;
if (root.left != null) {
postorderTraversal(root.left);
}
if (root.right != null) {
postorderTraversal(root.right);
}
if (root != null) {
res.add(root.val);
}
return res;
}
}
對應於leetcode145