zoukankan      html  css  js  c++  java
  • LeetCode 199 二叉树的右视图

    题目:

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

    示例:

    输入: [1,2,3,null,5,null,4]
    输出: [1, 3, 4]
    解释:
    
       1            <---
     /   
    2     3         <---
          
      5     4       <---

    解题思路:

    层次遍历。每次记录每一层的最右边的那个节点,并输出。这里介绍一个非常好用的模板,这个板子可以用来求高度、某一层节点的个数、树的最大宽度等。

    代码:

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<int> rightSideView(TreeNode* root) {
    13         vector<int> ans;
    14         if(root == NULL)
    15             return ans;
    16         int front=-1,rear=-1;
    17         int last=0,lever=0;
    18         //
    19         TreeNode* Q[1000];  //1、用一个数组来模拟队列,当然用其他的数据结构也行,但这里若用vector<TreeNode*> 会报错,因为vector中用指针不安全,具体原因未知
    20         Q[++rear] = root;
    21         TreeNode *p = root;
    22         while(front < rear){
    23             p = Q[++front];
    24             if(p->left != NULL)
    25                 Q[++rear] = p->left;
    26             if(p->right)
    27                 Q[++rear] = p->right;
    28             if(last == front){  //2、巧妙之处。在这个语句框中,可以求高度,如level,反向if即可累加计算每一层节点总个数,还可进行比较求树的最大宽度
    29                 ans.push_back(Q[front]->val);
    30                 last=rear;
    31                 lever++;
    32             }
    33         }
    34         return ans;
    35     }
    36 };
  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/moxiangfeng/p/10668208.html
Copyright © 2011-2022 走看看