[leetcode]Binary Tree Right Side View

来源:互联网 发布:软件系统接口设计方案 编辑:程序博客网 时间:2024/05/29 16:12

Binary Tree Right Side View

 

Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.

For example:
Given the following binary tree,

   1            <--- /   \2     3         <--- \     \  5     4       <---

You should return [1, 3, 4].

Credits:
Special thanks to @amrsaqr for adding this problem and creating all test cases.

题目:给定一棵二叉树,想像你站在最右边,返回从上到下你所能看到的所有结点。(即每层最右边的元素)

解题思路:层次遍历从左向右一遍,保存每层最后一个元素。或层次遍历从右边开始保存每层第一个元素

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public void levelOrder(TreeNode root, ArrayList<Integer> lst){        Queue<TreeNode> qt = new LinkedList();                qt.add(root);        lst.add(root.val);                int levelElemCount = 0;        int tmpLevelElemCount = 1;        TreeNode lastNode = null;                while(!qt.isEmpty()){            TreeNode tNode = qt.remove();            tmpLevelElemCount--;            if(tNode.left != null){                qt.add(tNode.left);                lastNode = tNode.left;                levelElemCount++;            }            if(tNode.right != null){                qt.add(tNode.right);                lastNode = tNode.right;                levelElemCount++;            }            if(tmpLevelElemCount == 0 && levelElemCount != 0){                tmpLevelElemCount = levelElemCount;                lst.add(lastNode.val);                levelElemCount = 0;            }        }    }    public List<Integer> rightSideView(TreeNode root) {        ArrayList<Integer> lst = new ArrayList<Integer>();                if(root == null) return lst;        levelOrder(root, lst);                return lst;    }}


0 0
原创粉丝点击