二叉树的右视图

题目形容:给定一个二叉树的 根节点 root,设想本人站在它的右侧,依照从顶部到底部的程序,返回从右侧所能看到的节点值。

示例阐明请见LeetCode官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:层序遍历二叉树

利用队列先进先出的特点层序遍历二叉树,具体处理过程如下:

  • 初始化一个队列,并将根节点增加到队列中,作为第一层;
  • 循环遍历队列中每一层的元素,并暂存到二维List中,并将下一层的节点按从左到右的程序退出到队列中;
  • 直到队列为空,遍历完结。

最初,按程序从二维List中取每一层的最初一个元素,并返回。

import com.kaesar.leetcode.TreeNode;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class LeetCode_199 {    /**     * 层序遍历     * 通过应用队列先进先出的形式遍历二叉树     *     * @param root     * @return     */    public static List<Integer> rightSideView(TreeNode root) {        if (root == null) {            return new ArrayList<>();        }        // 暂存每一层的节点        List<List<Integer>> numsList = new ArrayList<>();        Queue<TreeNode> nodes = new LinkedList<>();        nodes.add(root);        // 遍历每一层的节点,并将下一层的节点按从左到右的程序退出到队列中        while (!nodes.isEmpty()) {            List<Integer> nums = new ArrayList<>();            int count = nodes.size();            for (int i = 0; i < count; i++) {                TreeNode cur = nodes.poll();                nums.add(cur.val);                if (cur.left != null) {                    nodes.add(cur.left);                }                if (cur.right != null) {                    nodes.add(cur.right);                }            }            numsList.add(nums);        }        List<Integer> result = new ArrayList<>();        // 按程序取每一层的最初一个元素        for (List<Integer> integers : numsList) {            result.add(integers.get(integers.size() - 1));        }        return result;    }    public static void main(String[] args) {        /**         * 测试用例:         *     1         *   2   3         *    5   4         */        TreeNode root = new TreeNode(1);        root.left = new TreeNode(2);        root.right = new TreeNode(3);        root.left.right = new TreeNode(5);        root.right.right = new TreeNode(4);        // 冀望输入: 1,3,4        for (Integer integer : rightSideView(root)) {            System.out.print(integer + " ");        }    }}
【每日寄语】 如果一个人致力寻求向上,做好本人的工作,为本人寻找幸福,是好胜的话那么我就好胜!