LeetCode199.二叉树的右视图

2024-06-09 1405阅读

首先需要确定树的高度,再利用递归的思想,先遍历右子树,再遍历左子树。

LeetCode199.二叉树的右视图
(图片来源网络,侵删)

在遍历过程中,要检查当前层是否访问过,以及当前层高度是否等于树高

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int getHeight(TreeNode* root)
    {   
        int level = 0;
        TreeNode* cur;
        deque queue;
        if (root == NULL) return 0;
        /* 根节点入队 */
        queue.push_back(root);
        /* 遍历 */
        while (!queue.empty())
        {
            int size = queue.size();
            level++;
            for (int i = 0; i left != NULL)
                    queue.push_back(cur->left);
                if (cur->right != NULL)
                    queue.push_back(cur->right);
            }
        }
        return level;
    }
    
    vector rightSideView(TreeNode* root) 
    {   
        vector res;
        int curHeight = 0;
        int curMaxHeight = 0;
        int height = getHeight(root);
        viewFromRight(root, curHeight, curMaxHeight, height, res);
        return res;
    }
    void viewFromRight(TreeNode* root, int& curHeight, int& curMaxHeight, int height, vector& res)
    {   
        if (root == NULL) return;
        curHeight++;
        //根节点
        if (curHeight == 1)
        {
            curMaxHeight = curHeight;
            res.push_back(root->val);
            viewFromRight(root->right, curHeight, curMaxHeight, height, res);
            viewFromRight(root->left, curHeight, curMaxHeight, height, res);
        }
        //已完成遍历
        else if (curMaxHeight == height)
        {
            return;
        }
        //非根节点,且当前层未访问过
        else if (curHeight > curMaxHeight)
        {
            curMaxHeight = curHeight;
            res.push_back(root->val);
            viewFromRight(root->right, curHeight, curMaxHeight, height, res);
            viewFromRight(root->left, curHeight, curMaxHeight, height, res);
        }
        //非根节点,且当前层访问过
        else if (curHeight 
            viewFromRight(root-right, curHeight, curMaxHeight, height, res);
            viewFromRight(root->left, curHeight, curMaxHeight, height, res);
        }
        curHeight--;
    }
};
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]