iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
自我挑戰組

LeetCode 每日任務系列 第 7

LeetCode Day7

  • 分享至 

  • xImage
  •  

144. Binary Tree Preorder TraversalPreorder Traversal

題目:
給⼀棵⼆元樹,請「先序遍歷(Preorder Traversal)」它,並將節點的值依照順序放入⼀個 List 中返回。

Q:什麼是先序遍歷?
A:根節點 → 左⼦樹 → 右⼦樹
https://ithelp.ithome.com.tw/upload/images/20250921/20170015rTbsi0BCre.png

範例:

  • Example 1:
    Input: root = [1,null,2,3]
    Output: [1,2,3]
    Explanation:

  • Example 2:
    Input: root = [1,2,3,4,5,null,8,null,null,6,7,9]
    Output: [1,2,4,5,6,7,3,8,9]
    Explanation:

-Example 3:
Input: root = []
Output: []
Example 4:
Input: root = [1]
Output: [1]


想法:
by遞迴,用自己呼叫自己

程式碼:

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        traverse(root,result);
        return result;
    }
    //幫助函式:用遞迴走訪
    private void traverse(TreeNode node, List<Integer> res){
        if(node == null)return;

        res.add(node.val);          //先加入自己(根)
        traverse(node.left,res);    //再走左邊
        traverse(node.right,res);   //最後走右邊
    }


實際操作:

stack = [1] // 先放 root
output = []

STEP1
取出 stack 最上層元素:node = 1
output = [1]
stack = [] // 把 1 拿掉
:因為 1 有右子樹 → push(2)
:因為 1 沒有左子樹 → 不動作
stack = [2]

STEP2
取出 stack 最上層元素:node = 2
output = [1, 2]
stack = []
:因為 2 沒有右子樹 → 不動作
:因為 2 有左子樹(3) → push(3)
stack = [3]

STEP3
取出 stack 最上層元素:node = 3
output = [1, 2, 3]
stack = []
:因為 3 沒有左右子樹 → 不動作

STEP4
stack 已空,結束遍歷
輸出: [1, 2, 3]

https://ithelp.ithome.com.tw/upload/images/20250921/20170015nY9eQR4KTc.png


上一篇
LeetCode Day6
系列文
LeetCode 每日任務7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言