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 };
  • 相关阅读:
    数组练习1
    学习进度04
    求一个数组的最大子数组之和02
    求一个数组的最大子数组之和01
    学习进度03
    四则运算的功能添加版02
    第二周学习进度
    Right-BICEP 测试四则运算程序
    实现四则运算的功能添加版01
    本周实验PSP0 过程文档
  • 原文地址:https://www.cnblogs.com/moxiangfeng/p/10668208.html
Copyright © 2011-2022 走看看