LeetCode 199 — 二叉树的右视图

题目描述

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

题目分析

迭代

使用队列,层序遍历,记录每层的数量,在每层对后一个数字出队时,记录下来

递归

按照 中 -> 右 -> 左 的顺序进行递归遍历,维护当前的深度,当深度大于结果的大小时,说明是第一次来到这个层级,且是最右侧先遍历,所以把当前值加入结果中

Java

public List<Integer> rightSideView(TreeNode root) {
    List<Integer> ans = new ArrayList<>();
    dfs(root, ans, 1);
    return ans;
}

private void dfs(TreeNode root, List<Integer> ans, int depth) {
    if (root == null) {
        return;
    }
    if (depth > ans.size()) {
        ans.add(root.val);
    }
    dfs(root.right, ans, depth + 1);
    dfs(root.left, ans, depth + 1);
}

Kotlin

fun rightSideView(root: TreeNode?): List<Int> {
    val queue = LinkedList<TreeNode>()
    val ans = ArrayList<Int>()
    if (root == null) {
        return ans
    }
    queue.offer(root)
    while (!queue.isEmpty()) {
        var size = queue.size
        while (size > 0) {
            val node = queue.poll()
            if (node.left != null) {
                queue.offer(node.left)
            }
            if (node.right != null) {
                queue.offer(node.right)
            }
            if (size == 1) {
                ans.add(node.`val`)
            }
            size--
        }
    }
    return ans
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部