【二叉樹】二叉樹的右視圖

一、題目

力扣原題:https://leetcode-cn.com/problems/binary-tree-right-side-view/

二、BFS搜索

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    public List<Integer> rightSideView(TreeNode root) {
        if (null == root) {
            return new ArrayList<>();
        }

        List<Integer> rightSideView = new ArrayList<>();
        List<TreeNode> records = new ArrayList<>();
        records.add(root);
        while (!records.isEmpty()) {
            // 記錄下一層的節點
            List<TreeNode> childs = new ArrayList<>();
            for (TreeNode node : records) {
                if (null != node.left) {
                    childs.add(node.left);
                }
                if (null != node.right) {
                    childs.add(node.right);
                }
            }

            // 將每層最右側的節點記錄下來
            rightSideView.add(records.get(records.size() - 1).val);

            // 更新records數組
            records = childs;
        }
        return rightSideView;
    }
}
  • 基本思路:本題是二叉樹層次遍歷的變種。根據題意,二叉樹的右視圖,我們只要保存每層的最右側節點即可。
  • 時間複雜度:O(n)。BFS搜索,每個節點均會訪問一次。
  • 空間複雜度:O(n)。最差情況,二叉樹退化爲鏈表時。

三、總結

關鍵是聯想到二叉樹層次遍歷的變種,進而通過BFS搜索解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章