LeetCode中二叉樹遍歷問題
阿新 • • 發佈:2018-12-11
前置知識
二叉樹遍歷的相關知識, 可以參考我的另外一篇二分搜尋樹的博文,地址如下:
https://blog.csdn.net/love905661433/article/details/82981527
前序遍歷
LeetCode-144. 二叉樹的前序遍歷
題目
給定一個二叉樹,返回它的 前序 遍歷。
示例:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [1,2,3]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?
解題
class Solution {
public List< Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
preorderTraversal(root, result);
return result;
}
private void preorderTraversal(TreeNode root, List<Integer> result) {
if (root == null) {
return ;
}
result.add(root.val);
preorderTraversal(root.left, result);
preorderTraversal(root.right, result);
}
}
中序遍歷
LeetCode-94. 二叉樹的中序遍歷
題目
給定一個二叉樹,返回它的中序 遍歷。
示例:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [1,3,2]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?
解題
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
inorderTraversal(root, result);
return result;
}
private void inorderTraversal(TreeNode root, List<Integer> result) {
if (root == null) {
return;
}
inorderTraversal(root.left, result);
result.add(root.val);
inorderTraversal(root.right, result);
}
}
後序遍歷
LeetCode-145. 二叉樹的後序遍歷
題目
給定一個二叉樹,返回它的 後序 遍歷。
示例:
輸入: [1,null,2,3]
1
\
2
/
3
輸出: [3,2,1]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?
解題
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
postorderTraversal(root, result);
return result;
}
private void postorderTraversal(TreeNode root, List<Integer> result) {
if (root == null) {
return;
}
postorderTraversal(root.left, result);
postorderTraversal(root.right, result);
result.add(root.val);
}
}
總結
使用遞迴方法解決二叉樹的遍歷是非常簡單的, 如果使用非遞迴的方式的話, 就稍微複雜一點, 可以使用棧來輔助, 其實遞迴其實也是使用了棧的, 不過是系統棧而已, 所以可以顯式的使用棧來模擬系統棧