iT邦幫忙

0

LeetCode 145. Binary Tree Postorder Traversal (With Java)

  • 分享至 

  • xImage
  •  

附上題目連結

題目:給定一棵樹,求出透過postorder traversal的值

postorder探討:首先我們要先拜訪左邊的節點,之後拜訪右邊的節點,最後拜訪根(父)節點,同樣透過維基百科的圖片進行解說。

以此圖來說,它的postorder traversal是1-->4-->7-->6-->3-->13-->14-->10-->8,首先從8開始,有左節點,持續往左到1,1沒有左右節點,為第一個,回到3,3有右節點6,6有左節點4,4為第二個,4沒有左右節點,回到6,6有右節點7,7為第三個,7沒有左右節點,回到6,6是第四個,接著回到3,3是第五個,回到8,8有右節點10,10有右節點14,14有左節點13,13沒有左右節點因此為第六個,回到14,14為第七個,回到10,10為第八個,最後回到第九個8,結束遍歷。

虛擬碼(表達概念,不同程式語言要考慮其語法轉換)

postorderTraversal(Tree t){
    if(t==null)return;
    else{
        postorderTraversal(t.left);//追蹤左節點
        postorderTraversal(t.right);//追蹤右節點
        print(t.val);//印出根節點的值(如果有要儲存值可以改成list.add(t.val))
    }
}

在此題當中,我會使用一個List來儲存樹的資料並運用遞迴概念來進行回傳
附上程式碼以及說明

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<Integer> l=new ArrayList<>();//儲存node的值
    public List<Integer> postorderTraversal(TreeNode root) {
        if(root==null){return l;}//如果root為空值,直接回傳
        postorderTraversal(root.left);//追蹤左節點
        postorderTraversal(root.right);//追蹤右節點
        l.add(root.val);//儲存root的值
        return l;//回傳
    }
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言