zoukankan      html  css  js  c++  java
  • Leetcode: 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].

    这道题就是BT的Level Order Traversal,每次要换一层的时候,记录当前节点

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<Integer> rightSideView(TreeNode root) {
    12         ArrayList<Integer> res = new ArrayList<Integer>();
    13         if (root == null) return res;
    14         LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
    15         queue.offer(root);
    16         int PNum = 1;
    17         int CNum = 0;
    18         while (!queue.isEmpty()) {
    19             TreeNode cur = queue.poll();
    20             PNum--;
    21             if (cur.left != null) {
    22                 queue.offer(cur.left);
    23                 CNum++;
    24             }
    25             if (cur.right != null) {
    26                 queue.offer(cur.right);
    27                 CNum++;
    28             }
    29             if (PNum == 0) {
    30                 res.add(cur.val);
    31                 PNum = CNum;
    32                 CNum = 0;
    33             }
    34         }
    35         return res;
    36     }
    37 }

     注意,每次都是先添加右边child,所以是i==0的时候add

     1 public class Solution {
     2     public List<Integer> rightSideView(TreeNode root) {
     3         // reverse level traversal
     4         List<Integer> result = new ArrayList();
     5         Queue<TreeNode> queue = new LinkedList();
     6         if (root == null) return result;
     7 
     8         queue.offer(root);
     9         while (queue.size() != 0) {
    10             int size = queue.size();
    11             for (int i=0; i<size; i++) {
    12                 TreeNode cur = queue.poll();
    13                 if (i == 0) result.add(cur.val);
    14                 if (cur.right != null) queue.offer(cur.right);
    15                 if (cur.left != null) queue.offer(cur.left);
    16             }
    17 
    18         }
    19         return result;
    20     }
    21 }
  • 相关阅读:
    转 W P 代码淆混
    Flash网页游戏辅助工具制作简析
    Flash Player安全沙漏规则
    用loader.loadbytes直接load bitmapdata.getpixels产生的bytearray
    游戏及开发人员的认识
    一犯人在执行死刑前三天供出祖传治癌奇方(转)
    AIR教程列表
    养生名言 (春、夏、秋、冬。)
    十天学会单片机和C语言编程
    UI设计规范收藏
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4416160.html
Copyright © 2011-2022 走看看