199. Binary Tree Right Side View (Medium)

本文介绍了一个中等难度的LeetCode题目:二叉树右视图。该题要求从二叉树的顶部到底部返回所有可见节点的值。文章提供了一个使用广度优先搜索的C++解决方案,通过队列实现逐层遍历,最终获取每层最右侧节点的值。

Leetcode 199. Binary Tree Right Side View (Medium) (cpp)

Tag: Tree, Depth-first Search, Breadth-first Search

Difficulty: Medium


/*

199. Binary Tree Right Side View (Medium)

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].

*/
class Solution {
public:
	vector<int> rightSideView(TreeNode* root) {
		if (root == NULL) {
			return{};
		}
		vector<int> res;
		queue<TreeNode*> q;
		q.push(root);
		while (!q.empty()) {
			int _size = q.size();
			for (int i = 0; i < _size; i++) {
				TreeNode* node = q.front();
				q.pop();
				if (node->left != NULL) {
					q.push(node->left);
				}
				if (node->right != NULL) {
					q.push(node->right);
				}
				if (i == _size - 1) {
					res.push_back(node->val);
				}
			}
		}
		return res;
	}
};


# #Variant you can use # user_param: 用户在弹窗输入的参数 #env: Odoo Environment on which the action is triggered #time, datetime, dateutil, pytz: useful Python libraries #logger: #UserError: Warning Exception to use with raise #'obj': record, #'wb': return of openpyxl.load_workbook(), #'ws': openpyxl.worksheet.worksheet.Worksheet, #'style': openpyxl.styles, #'add_img': add_img, #'copy': copy, # #Example: #ws['G9'] = obj.confirmation_date #ws["B1"].font=style.Font(name="宋体",size=17,color="00CCFF") #ws.cell(2,1).fill = style.PatternFill("solid",fgColor="00FF02") #ws.cell(row,col).alignment = style.Alignment(horizontal='center', vertical='justify', wrap_text=True) #ws.merge_cells('A1:D4') #ws.unmerge_cells('A1:D4') #row = 17 #idx = 1 #for line in obj.order_line: # ws.cell(row,1).value = idx # add_img(ws, (row,2), line.product_id.image_medium, (100, 100)) # ws.cell(row,3).value = line.product_id.with_context(lang=obj.partner_id.lang).name # ws.insert_rows(row,1) # # row=row+1 # idx=idx+1 from openpyxl.styles import Font, Alignment, PatternFill, Border, Side from bs4 import BeautifulSoup from datetime import datetime import calendar # 获取工作表对象 ws = wb.active # 或者传入具体的 ws # 设置字体和边框样式 header_font = Font(name='微软雅黑', size=11, bold=True) body_font = Font(name='微软雅黑', size=10) alignment_center = Alignment(horizontal='center', vertical='center', wrap_text=True) alignment_left = Alignment(horizontal='left', vertical='center', wrap_text=True) side = Side(style='thin', color='000000') border = Border(left=side, right=side, top=side, bottom=side) if obj and obj[0].partner_id: partner_name = obj[0].partner_id.name else: partner_name = '' if obj: dates = [r.date for r in obj if r.date] if dates: min_date = min(dates) # 获取当月第一天 first_day = min_date.replace(day=1) # 获取当月最后一天 last_day_num = calendar.monthrange(min_date.year, min_date.month)[1] last_day = min_date.replace(day=last_day_num) # 设置日期范围为当月第一天到最后一天 date_range = f'{first_day.month}.{first_day.day}-{last_day.month}.{last_day.day}' date_year = f'{min_date.strftime("%Y年%m月")}' else: date_range = '' else: date_range = '' # 1. 设置主标题 ws.merge_cells('B1:K1') ws['B1'] = f'新鸿贵{date_year}对账单 ({date_range})' ws['B1'].font = Font(name='微软雅黑', size=18, bold=True) ws['B1'].alignment = alignment_center ws.merge_cells('B2:K2') ws['B2'] = f'客户:{partner_name}' ws['B2'].font = Font(name='微软雅黑', size=12) ws['B2'].alignment = alignment_left # ws.merge_cells('B3:D3') # ws['B3'] = date_range # ws['B3'].font = Font(name='微软雅黑', size=11, bold=True) # ws['B3'].alignment = alignment_center # 5. 表头设置 headers = [ '序号', '日期', '单号', '产品规格', '车号', '发货数量(T)', '收货数量(T)', '单价', '金额', '备注' ] # 设置列宽 col_widths = [8, 12, 15, 15, 10, 12, 12, 10, 12, 15] for col_idx, width in enumerate(col_widths, 2): # B 列开始是第2列 ws.column_dimensions[chr(64 + col_idx)].width = width # 写入表头 for idx, header in enumerate(headers, 2): cell = ws.cell(row=3, column=idx, value=header) cell.font = header_font cell.alignment = alignment_center cell.border = border row_index = 4 for idx, record in enumerate(obj, 1): cell = ws.cell(row=row_index, column=2, value=idx) cell.font = body_font cell.alignment = alignment_center date_value = record.date.strftime('%Y-%m-%d') if record.date else '' cell = ws.cell(row=row_index, column=3, value=date_value) cell.font = body_font cell.alignment = alignment_center cell = ws.cell(row=row_index, column=4, value=record.name or '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=5, value='') cell = ws.cell(row=row_index, column=5, value='') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=6, value=record.car_number or '') cell = ws.cell(row=row_index, column=6, value= '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=7, value= '') cell = ws.cell(row=row_index, column=7, value= '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=8, value=record.transaction_count or '') cell = ws.cell(row=row_index, column=8, value=record.transaction_count or '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=9, value=record.price or '') cell = ws.cell(row=row_index, column=9, value= '') cell.font = body_font cell.alignment = alignment_center cell = ws.cell(row=row_index, column=10, value=record.amount_untaxed_in_currency_signed or '') cell.font = body_font cell.alignment = alignment_center # cell = ws.cell(row=row_index, column=11, value=record.notes or '') cell = ws.cell(row=row_index, column=11, value= '') cell.font = body_font cell.alignment = alignment_center # 添加边框 for col_idx in range(2, 12): ws.cell(row=row_index, column=col_idx).border = border row_index += 1 列表选择几条数据就导出几条,应该如何修改代码才可以实现
最新发布
08-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值