編程題 03-樹2 List Leaves【PAT】

文章目錄

  • 題目
    • 輸入格式
    • 輸出格式
    • 輸入樣例
    • 輸出樣例
  • 題解
    • 解題思路
    • 完整代碼

編程練習題目集目錄

題目

??Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.

輸入格式

??Each input file contains one test case. For each case, the first line gives a positive integer N ( ≤ 10 ) N (≤10) N(10) which is the total number of nodes in the tree ? ? -- ?? and hence the nodes are numbered from 0 0 0 to N ? 1 N?1 N?1. Then N N N lines follow, each corresponds to a node, and gives the indices of the left and right children of the node. If the child does not exist, a " ? " "-" "?" will be put at the position. Any pair of children are separated by a space.

輸出格式

??For each test case, print in one line all the leaves’ indices in the order of top down, and left to right. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.

輸入樣例

8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6

輸出樣例

4 1 5

題解

解題思路

在這里插入圖片描述
??找到樹的根結點,根據樹的根結點以及其它一系列結點構建樹,按照從上到下,從左到右的順序(層次遍歷)輸出這棵樹的葉子結點。

完整代碼

#include <iostream>         // 包含標準輸入輸出流庫
#include <queue>            // 包含隊列數據結構庫using namespace std;        // 使用標準命名空間#define MaxN  10            // 定義最大節點數量// 定義二叉樹節點結構
struct TreeNode
{int Data;           // 節點存儲的數據int Left;           // 左子節點的索引,若無左子節點則為-2int Right;          // 右子節點的索引,若無右子節點則為-2
} TN[MaxN];             // TN[]為全局變量,存儲所有節點信息,最多MaxN個節點int buildTree(TreeNode T[], int n);         // 構建二叉樹,并返回根節點索引
void Traversal(int root);                   // 層序遍歷二叉樹,并輸出葉節點值int main(void)
{int N, root;                            // N表示樹的節點數量,root表示根節點索引cin >> N;root = buildTree(TN, N);                // 構建樹并獲取根節點索引Traversal(root);                        // 層序遍歷并輸出葉節點值return 0;
}// 構建二叉樹
int buildTree(TreeNode T[], int n)
{int i, check[MaxN];                  // 檢查數組,用于標記是否為子節點char left, right;                    // 用于存儲左右子節點的輸入字符if (n == 0) {                        // 如果節點數量為0,返回-2表示空樹return -2;}for (i = 0; i < n; i++) {           // 初始化所有節點,初始時假設所有節點都不是子節點check[i] = -1;                  // -1表示非子節點TN[i].Data = i;                 // 每個節點的編號即為自己的數據}for (i = 0; i < n; i++) {           // 根據輸入構建樹cin >> left >> right;           // 輸入當前節點的左右子節點信息if (left != '-') {                  // 如果有左子節點T[i].Left = left - '0';         // 將字符轉換為索引check[T[i].Left] = 1;           // 標記左子節點對應的索引為子節點}else {T[i].Left = -2;                 // 表示無左子節點}if (right != '-') {                 // 如果有右子節點T[i].Right = right - '0';       // 將字符轉換為索引check[T[i].Right] = 1;          // 標記右子節點對應的索引為子節點}else {T[i].Right = -2;                // 表示無右子節點}}// 查找根節點(未被標記為子節點的節點)for (i = 0; i < n; i++) {if (check[i] == -1) break;          // 找到根節點}return i;                               // 返回根節點索引
}
// 層序遍歷二叉樹并輸出葉節點值
void Traversal(int root)
{queue<struct TreeNode> Q;               // 定義一個隊列用于層序遍歷struct TreeNode T;                      // 臨時存儲隊列中的節點if (root == -2) {                       // 如果根節點不存在,直接返回return;}Q.push(TN[root]);                       // 將根節點入隊int flag = 0;                           // 標志變量,用于控制輸出格式while (!Q.empty()) {                    // 當隊列非空時T = Q.front();                      // 取出隊列頭部節點Q.pop();                            // 出隊if (T.Left == -2 && T.Right == -2) {        // 如果當前節點是葉節點if (flag == 1) cout << " ";             // 如果不是第一個葉節點,輸出空格else flag = 1;                          // 標記已經輸出過葉節點printf("%d", T.Data);             // 輸出葉節點的值}if (T.Left != -2) {Q.push(TN[T.Left]);                     // 如果有左子節點,將左子節點入隊}if (T.Right != -2) {                        // 如果有右子節點,將右子節點入隊Q.push(TN[T.Right]);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80049.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80049.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80049.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT設置MySQL驅動

QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 第一步&#xff1a;下載MySQL https://dev.mysql.com/downloads/mysql/ 解壓縮下載的安裝包&#xff0c;其目錄結構如下所示&#xff1a; 第二…

ABP User Interface-Angular UI中文詳解

本系列文章主要用于對ABP User Interface-Angular UI &#xff08;Angular UI | ABP.IO Documentation&#xff09;不分的中文講解以及記錄自己在學習過程中發現的容易出錯的地方。 1. 開發Development 2. 核心功能Core Functions 3. 通用組件Utilities 4. 自定義Customiza…

常用負載均衡技術有哪些?不同網絡層面上的網絡負載均衡技術

前言 負載均衡是一種策略&#xff0c;它能讓多臺服務器或多條鏈路共同承擔一些繁重的計算或I/O任務&#xff0c;從而以較低成本消除網絡瓶頸&#xff0c;提高網絡的靈活性和可靠性。 在系統管理員發現網絡性能不好時&#xff0c;可以通過網絡負載均衡來分配資源&#xff0c;以…

ARMV8 RK3399 u-boot TPL啟動流程分析 --crt0.S

上一篇介紹到start.S 最后一個指令是跳轉到_main, 接下來分析 __main 都做了什么 arch/arm/lib/crt0.S __main 注釋寫的很詳細&#xff0c;主要分為5步 1. 準備board_init_f的運行環境 2. 跳轉到board_init_f 3. 設置broad_init_f 申請的stack 和 GD 4. 完整u-boot 執行re…

RabbitMQ--進階篇

RabbitMQ 客戶端整合Spring Boot 添加相關的依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 編寫配置文件&#xff0c;配置RabbitMQ的服務信息 spri…

Redis--基礎知識點--27--redis緩存分類樹

在 Redis 中存儲分類樹&#xff0c;通常需要選擇合適的數據結構來表現層級關系。以下是使用 字符串&#xff08;String&#xff09; 和 哈希&#xff08;Hash&#xff09; 兩種常見方案的舉例說明&#xff0c;結合電商分類場景&#xff08;如 電子產品 > 手機 > 智能手機…

【C++】匯編角度分析棧攻擊

棧攻擊 介紹原理示例代碼匯編分析 介紹原理 核心原理是通過 緩沖區溢出&#xff08;Buffer Overflow&#xff09; 等漏洞&#xff0c;覆蓋棧上的關鍵數據&#xff08;如返回地址、函數指針&#xff09;&#xff0c;從而改變程序執行流程&#xff1b; 在 C 中&#xff0c;每個…

訪問 Docker 官方鏡像源(包括代理)全部被“重置連接”或超時

華為云輕量應用服務器&#xff08;Ubuntu 系統&#xff09; 遇到的問題是&#xff1a; &#x1f512; 訪問 Docker 官方鏡像源&#xff08;包括代理&#xff09;全部被“重置連接”或超時了&#xff0c;說明你這臺服務器的出境網絡對這些國外域名限制很嚴格&#xff0c;常見于華…

Java語言

本文來源 &#xff1a; 騰訊元寶 Java是一種面向對象、跨平臺的高級編程語言&#xff0c;最初由Sun Microsystems&#xff08;現為Oracle公司所有&#xff09;于1995年推出&#xff0c;廣泛應用于Web開發、移動應用、大數據處理、嵌入式系統等領域。以下是其核心特點和應用概述…

無償幫寫畢業論文(看不懂的可以私信博主)

以下教程教你如何利用相關網站和AI免費幫你寫一個畢業論文。畢竟畢業論文只要過就行&#xff0c;脫產學習這么多年&#xff0c;終于熬出頭了&#xff0c;完成畢設后有空就去多看看親人好友&#xff0c;祝好&#xff01; 一、找一個論文模板 廢話不多說&#xff0c;先上干貨Ov…

python打卡day26

函數、參數、變量 知識點回顧&#xff1a; 函數的定義變量作用域&#xff1a;局部變量和全局變量函數的參數類型&#xff1a;位置參數、默認參數、不定參數傳遞參數的手段&#xff1a;關鍵詞參數傳遞參數的順序&#xff1a;同時出現三種參數類型時 def function_name(parameter…

LeetCode 熱題 100 437. 路徑總和 III

LeetCode 熱題 100 | 437. 路徑總和 III 大家好&#xff0c;今天我們來解決一道經典的二叉樹問題——路徑總和 III。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求計算二叉樹中節點值之和等于給定目標值 targetSum 的路徑數目。 問題描述 給定一個二叉樹的根節點 ro…

vue3學習-局部使用vue框架案例

目錄 局部使用vue框架步驟 簡單案例1 簡單案例2【 結構化賦值語法】 簡單案例3【使用模塊化開發模式】 基本數據的簡單應用&#xff0c;對象的簡單應用 數組的簡單應用 局部使用vue框架步驟 1 引用 vue框架的核心文件和 涉及ES6語法的文件 注意&#xff1a;這里文件&am…

初識Linux · IP分片

目錄 前言&#xff1a; IP分片 分片vs不分片 如何分片 分片舉例 三個字段 前言&#xff1a; 前文IP協議上和IP協議下我們已經把IP協議的報頭的大多數字段介紹了&#xff0c;唯獨有三個字段現在還有介紹&#xff0c;即16位標識&#xff0c;8位協議&#xff0c;13位片偏移…

u3d 定義列表詳細過程

層級結構 - Canvas - Scroll View - Viewport - Content (Vertical Layout Group) - Item1 (Prefab) - Item2 (Prefab) ... 詳細設置步驟 1. 創建 Canvas 2. 添加 Scroll View 組件 3. 在 Scroll View 下創建 Content 子對象 4. 添加 …

產品方法論與 AI Agent 技術的深度融合:從決策智能到價值創造

一、引言&#xff1a;智能化時代的產品范式革命 在數字化轉型的深水區&#xff0c;產品開發正經歷著從 “功能定義” 到 “體驗設計” 再到 “智能演化” 的范式躍遷。麥肯錫 2024 年報告指出&#xff0c;采用 AI 驅動產品方法論的企業&#xff0c;新品研發周期平均縮短 40%&a…

力扣.1471數組的k個最強值,力扣.1471數組的k個最強值力扣1576.替換所有的問號力扣1419.數青蛙?編輯力扣300.最長遞增子序列

目錄 力扣.1471數組的k個最強值 力扣1576.替換所有的問號 力扣1419.數青蛙?編輯 力扣300.最長遞增子序列 力扣.1471數組的k個最強值 class Solution {public static int[] getStrongest(int[] arr,int k) {if(karr.length){return arr;}int []retnew int[k];int narr.lengt…

使用docker安裝clickhouse集群

1、簡介 clickhouse 作為大數據場景中&#xff0c;實現快速檢索的常用列式存儲數據庫&#xff0c;采用物理機部署&#xff0c;會在數據量大的場景中&#xff0c;物理機器存儲達到閾值需要擴容&#xff0c;會帶來比較大的問題&#xff0c;因此&#xff0c;使用docker部署clickho…

package-lock.json能否直接刪除?

package-lock.json能否直接刪除&#xff1f; package-lock.json 生成工具&#xff1a;由 npm 自動生成。 觸發條件&#xff1a;當運行 npm install 時&#xff0c;如果不存在 package-lock.json&#xff0c;npm 會創建它&#xff1b;如果已存在&#xff0c;npm 會根據它精確安…

如何在 Windows 命令提示符中創建多個文件夾和多個文件

如何在 Windows 命令提示符中創建多個文件夾和多個文件 雖然大多數用戶習慣使用 Windows 圖形界面來創建文件夾&#xff0c;但如果你需要一次性創建多個文件夾或文件&#xff0c;如同在類Unix系統中可以使用mkdir和touch命令一樣&#xff0c;windows下也有創建目錄和文件的對應…