二叉树系列主题Code

Python实现二叉树遍历

# 定义二叉树节点类  
class TreeNode:  def __init__(self, val=0, left=None, right=None):  self.val = val  self.left = left  self.right = right  # 前序遍历(非递归)  
def preorderTraversal(root):  if not root:  return []  stack, output = [root], []  while stack:  node = stack.pop()  if node:  output.append(node.val)  if node.right:  stack.append(node.right)  if node.left:  stack.append(node.left)  return output  # 中序遍历(非递归)  
def inorderTraversal(root):  stack, output, current = [], [], root  while True:  while current:  stack.append(current)  current = current.left  if not stack:  return output  current = stack.pop()  output.append(current.val)  current = current.right  # 后序遍历(非递归)  
def postorderTraversal(root):  if not root:  return []  stack1, stack2, output = [root], [], []  while stack1:  node = stack1.pop()  if node:  stack2.append(node)  if node.left:  stack1.append(node.left)  if node.right:  stack1.append(node.right)  while stack2:  node = stack2.pop()  output.append(node.val)  return output[::-1]  # 逆序输出,得到后序遍历结果  # 层次遍历(非递归)  
def levelOrderTraversal(root):  if not root:  return []  from collections import deque  queue, output = deque([root]), []  while queue:  level_size = len(queue)  current_level = []  for _ in range(level_size):  node = queue.popleft()  # 弹出队列左侧元素  current_level.append(node.val)  if node.left:  queue.append(node.left)  # 左孩子入队  if node.right:  queue.append(node.right)  # 右孩子入队  output.append(current_level)  return output

cpp实现二叉树遍历

#include <iostream>  
#include <stack>  
#include <queue>
using namespace std;  // 二叉树节点定义  
struct TreeNode {  int val;  TreeNode* left;  TreeNode* right;  TreeNode(int x) : val(x), left(NULL), right(NULL) {}  
};  // 前序遍历(递归实现)  
void preorderTraversalRecursive(TreeNode* root) {  if (root == NULL) {  return;  }  cout << root->val << " ";  preorderTraversalRecursive(root->left);  preorderTraversalRecursive(root->right);  
}  // 前序遍历(迭代实现)  
void preorderTraversalIterative(TreeNode* root) {  if (root == NULL) {  return;  }  stack<TreeNode*> stk;  stk.push(root);  while (!stk.empty()) {  TreeNode* node = stk.top();  stk.pop();  cout << node->val << " ";  if (node->right != NULL) {  stk.push(node->right);  }  if (node->left != NULL) {  stk.push(node->left);  }  }  
}  // 中序遍历(递归实现)  
void inorderTraversalRecursive(TreeNode* root) {  if (root == NULL) {  return;  }  inorderTraversalRecursive(root->left);  cout << root->val << " ";  inorderTraversalRecursive(root->right);  
}  // 中序遍历(迭代实现)  
void inorderTraversalIterative(TreeNode* root) {  if (root == NULL) {  return;  }  stack<TreeNode*> stk;  TreeNode* curr = root;  while (curr != NULL || !stk.empty()) {  while (curr != NULL) {  stk.push(curr);  curr = curr->left;  }  curr = stk.top();  stk.pop();  cout << curr->val << " ";  curr = curr->right;  }  
}  // 后序遍历(递归实现)  
void postorderTraversalRecursive(TreeNode* root) {  if (root == NULL) {  return;  }  postorderTraversalRecursive(root->left);  postorderTraversalRecursive(root->right);  cout << root->val << " ";  
}  // 后序遍历(迭代实现)  
void postorderTraversalIterative(TreeNode* root) {  if (root == NULL) {  return;  }  stack<TreeNode*> stk1, stk2;  stk1.push(root);  while (!stk1.empty()) {  TreeNode* node = stk1.top();  stk1.pop();  stk2.push(node);  if (node->left != NULL) {  stk1.push(node->left);  }  if (node->right != NULL) {  stk1.push(node->right);  }  }  while (!stk2.empty()) {  cout << stk2.top()->val << " ";  stk2.pop();  }  
}  // 层次遍历  
void levelOrderTraversal(TreeNode* root) {  if (root == NULL) {  return;  }  queue<TreeNode*> q;  q.push(root);  while (!q.empty()) {  int levelSize = q.size();  for (int i = 0; i < levelSize; i++) {  TreeNode* node = q.front();  q.pop();  cout << node->val << " ";  if (node->left != NULL) {  q.push(node->left);  }  if (node->right != NULL) {  q.push(node->right);  }  }  cout << endl; // 每一层遍历完后换行  }  int main() {  // 创建二叉树  TreeNode* root = new TreeNode(1);  root->left = new TreeNode(2);  root->right = new TreeNode(3);  root->left->left = new TreeNode(4);  root->left->right = new TreeNode(5);  root->right->left = new TreeNode(6);  root->right->right = new TreeNode(7);  cout << "前序遍历(递归实现): ";  preorderTraversalRecursive(root); cout << endl; // 输出:1 2 4 5 3 6 7
}

水平有限,有问题随时联系~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下df -h 命令一直卡住的解决方法

在Linux中&#xff0c;偶尔遇到用 df -h 查看磁盘情况时&#xff0c;一直卡住无法显示结果。 解决方法&#xff1a; 1、首先使用strace追踪到底执行到哪里卡住 $ strace df -h 2、如果没有strace命令则进行安装 $ yum install strace -y 3、显示出卡住的地方&#xff0c;如…

Python操作PDF:PDF文件合并与PDF页面重排

处理大量的 PDF 文档是非常麻烦的事情&#xff0c;频繁地打开关闭文件会严重影响工作效率。对于一大堆内容相关的 PDF 文件&#xff0c;我们在处理时可以将这些 PDF 文件合并起来&#xff0c;作为单一文件处理&#xff0c;从而提高处理效率。同时&#xff0c;我们也可以选取不同…

Python的web自动化学习(四)Selenium的显性等待(元素定位)

引言&#xff1a; Selenium的显性等待&#xff0c;其常用的定位方法介绍&#xff0c;后面持续更细具体用法 示例如下&#xff1a; <input type"text" class"s_ipt" name"wd" id"kw" maxlength"100" autocomplete"…

SaaS 出海,如何搭建国际化服务体系?(三)

防噎指南&#xff1a;这可能是你看到的干货含量最高的 SaaS 出海经验分享&#xff0c;请准备好水杯&#xff0c;放肆食用&#xff08;XD。 当越来越多中国 SaaS 企业选择开启「国际化」副本&#xff0c;出海便俨然成为国内 SaaS 的新角斗场。 LigaAI 观察到&#xff0c;出海浪…

Linux | 如何保持 SSH 会话处于活动状态

在远程服务器管理和安全数据传输中&#xff0c;SSH&#xff08;Secure Shell&#xff09;是不可或缺的工具。然而&#xff0c;它的便利性和安全性有时会因常见的问题而受到损害&#xff1a;冻结 SSH 会话。 此外&#xff0c;session 的突然中断可能会导致工作丢失、项目延迟和无…

软件测试/测试开发丨利用ChatGPT自动生成架构图

点此获取更多相关资料 简介 架构图通过图形化的表达方式&#xff0c;用于呈现系统、软件的结构、组件、关系和交互方式。一个明确的架构图可以更好地辅助业务分析、技术架构分析的工作。架构图的设计是一个有难度的任务&#xff0c;设计者必须要对业务、相关技术栈都非常清晰…

锐捷RG-EW1200G登录绕过漏洞复现

文章目录 锐捷RG-EW1200G登录绕过漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.复现 0x06 修复建议 锐捷RG-EW1200G登录绕过漏洞复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、…

为什么开设项目管理专栏

首先&#xff0c;向各位同道同行&#xff0c;分享一个来自博主的好消息&#xff1a; 2023年8月&#xff0c;经过一次为期3个月的紧张、有序、活泼、生动的学习之旅&#xff0c;博主顺利通过了PMP认证&#xff0c;并且拿下3A。 其次&#xff0c;为记录本次学习过程的点滴和心得…

从零开始的目标检测和关键点检测(一):用labelme标注数据集

从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 1、可视化标注结果2、划分数据集3、Lableme2COCO&#xff0c;将json文件转换为MS COCO格式 前言&#xff1a;前段时间用到了mmlab的mmdetction和mmpose&#xff0c;因此以一个小的数…

63. 不同路径 II

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到右下角…

重生奇迹mu下贫民玩家的崛起之路

任何一个网络游戏中都有两种玩家&#xff0c;一种为壕级玩家&#xff0c;一种则是贫民&#xff0c;这种区分并没有过份的含义&#xff0c;只是不同的游戏消费观念使然&#xff0c;尤其是贫民玩家反而还居多数&#xff01;甚至你只要精通以下的种种技巧&#xff0c;贫民玩家也可…

【基于MRA:自适应高频融合和注入系数优化:Pansharpening】

Pansharpening Based on Adaptive High-Frequency Fusion and Injection Coefficients Optimization &#xff08;基于自适应高频融合和注入系数优化的全色锐化&#xff09; 全色锐化的目的是将多光谱&#xff08;MS&#xff09;图像与全色&#xff08;PAN&#xff09;图像融…

面向Three.js开发者的3D自动纹理化开发包

DreamTexture.js 是面向 three.js 开发者的 3D 模型纹理自动生成与设置开发包&#xff0c;可以为 webGL 应用增加 3D 模型的快速自动纹理化能力。 图一为原始模型, 图二图三为贴图后的模型。提示词&#xff1a; city, Realistic , cinematic , Front view ,Game scene graph 1、…

腾讯云双11活动时间、活动入口、优惠政策详细解读

2023年腾讯云双11大促活动已开启&#xff0c;作为年终最大的一次优惠促销活动&#xff0c;腾讯云的优惠力度还是不错的&#xff0c;爆款云服务器首年88元&#xff0c;还有9999元大额代金券免费领取&#xff01; 一、腾讯云双11活动时间 即日起至2023-11-30 23:59:59&#xff0…

项目实战之安装依赖npm install

文章目录 nvmdeasync包和node-gyp报错deasync包node-gyp报错 前言&#xff1a;有些人看着还活着其实已经凉了好一会儿了。 初拿到项目 初拿到项目肯定是先看配置 package.json的啦&#xff0c;看看都需要安装什么依赖&#xff0c;然后 npm install,OK结束 皆大欢喜。 ————…

kvm--存储挂载

创建存储卷 然后后面分别挂载到虚拟机不同目录下 查看磁盘 格式化&#xff08;需要挂载的分区或磁盘&#xff09; 获得UUID 挂载磁盘或分区 开机自动挂载 vim /etc/fstab mount -a 不报错就可以了

爬虫 | 【实践】百度搜索链接爬取,生成标题词云 | 以“AI换脸”为例

目录 &#x1f4da;链接爬取 &#x1f407;流程梳理 &#x1f407;代码实现 &#x1f407;结果 &#x1f4da;词云生成 &#x1f407;代码实现 &#x1f407;结果 &#x1f4da;链接爬取 &#x1f407;流程梳理 总体流程是&#xff1a;构建搜索链接 -> 发送HTTP请求…

关于爬虫API常见的技术问题和解答

随着互联网的快速发展&#xff0c;数据获取变得越来越重要。爬虫API作为一种高效的数据获取手段&#xff0c;被广泛应用于各种场景。然而&#xff0c;在实际使用过程中&#xff0c;我们经常会遇到一些技术问题。本文将详细介绍爬虫API的常见技术问题及相应的解决方案。 一、爬…

Cannot resolve class ‘DruidDataSource‘

无法配置 DataSource&#xff1a;未指定“url”属性&#xff0c;并且无法配置嵌入数据源。 原因&#xff1a;无法确定合适的驱动程序类 原因是数据库没有配置或者没事错误 1配置配置文件报错 没有依赖 pom.xml加入 <dependency><groupId>com.alibaba</grou…

Hydra(九头蛇海德拉)教程

Hydra 参数 hydra <参数> <IP地址> <服务名> 参数案例说明-l-l root登录账号-L-L userName.txt用户文件-p-l 123456登录密码-P-P passwd.txt密码文件-e-e nsrn 空密码 s 用户名即密码 r 用户名和密码相反&#xff08;如root的密码为toor&#xff09;-s-s 21指…