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