当前位置: 首页 > news >正文

二叉树系列主题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
}

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

相关文章:

二叉树系列主题Code

Python实现二叉树遍历 # 定义二叉树节点类 class TreeNode: def __init__(self, val0, leftNone, rightNone): self.val val self.left left self.right right # 前序遍历&#xff08;非递归&#xff09; def preorderTraversal(root): if not root: return [] …...

Leetcode 673. 最长递增子序列的个数 C++

673最长递增子序列的个数 给定一个未排序的整数数组 nums &#xff0c; 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列&#xff0c;分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 示例 2: 输入: …...

html用css grid实现自适应四宫格放视频

想同时播放四个本地视频&#xff1a; 四宫格&#xff1b;自式应&#xff0c;即放缩浏览器时&#xff0c;四宫格也跟着放缩&#xff1b;尽量填满页面&#xff08;F11 浏览器全屏时可以填满整个屏幕&#xff09;。 在 html 中放视频用 video 标签&#xff0c;参考 [1]&#xff1…...

【机器学习可解释性】5.SHAP值的高级使用

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP 值5.SHAP值的高级使用 正文 汇总SHAP值以获得更详细的模型解释 总体回顾 我们从学习排列重要性和部分依赖图开始&#xff0c;以显示学习后的模型的内容。 然后我们学习了SHAP值来分解单个预测的组成部…...

CentOS开机自动运行jar程序实现

前面已经有一篇文章介绍jar包如何在CentOS上运行&#xff0c;《在linux上运行jar程序操作记录》 后来发现系统重启后不能自动运行&#xff0c;导致每次都要手动打开&#xff0c;这篇介绍如何自动开机启动运行jar程序。 一、找到JDK程序执行位置 [rootlocalhost /]# which jav…...

matlab双目标定中基线物理长度获取

在MATLAB进行双目摄像机标定时,通常会获得相机的内参,其中包括像素单位的焦距(focal length)以及物理单位的基线长度(baseline)。对于应用中的深度估计和测量,基线长度的物理单位非常重要,因为它直接影响到深度信息的准确性。有时候,您可能只能获取像素单位的焦距和棋…...

自己动手实现一个深度学习算法——二、神经网络的实现

文章目录 1. 神经网络概述1&#xff09;表示2&#xff09;激活函数3&#xff09;sigmoid函数4&#xff09;阶跃函数的实现5&#xff09;sigmoid函数的实现6)sigmoid函数和阶跃函数的比较7&#xff09;非线性函数8&#xff09;ReLU函数 2.三层神经网络的实现1&#xff09;结构2&…...

gRPC源码剖析-Builder模式

一、Builder模式 1、定义 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的的表示。 2、适用场景 当创建复杂对象的算法应独立于该对象的组成部分以及它们的装配方式时。 当构造过程必须允许被构造的对象有不同的表示时。 说人话&#xff1a…...

ARM传输数据以及移位操作

3.2.2 数据传送指令 LDR/STR指令用来在寄存器和内存之间输送数据。如果我们想要在寄存器之间传送数据&#xff0c;则可以使用MOV指令。MOV指令的格式如下。 MOV {cond} {s}Rd, oprand2 MOV {cond} {s}Rd, oprand2 其中&#xff0c;{cond}为条件指令可选项&#xff0c;{s}用来表…...

06、如何将对象数组里 obj 的 key 值变成动态的(即:每一个对象对应的 key 值都不同)

1、数据情况&#xff1a; 其一、从后端拿到的数据为&#xff1a; let arr [1,3,6,10,11,23,24] 其二、目标数据为&#xff1a; [{vlan_1: 1, value: 1}, {vlan_3: 3, value: 1}, {vlan_6: 6, value: 1}, {vlan_10: 10, value: 1}, {vlan_11: 11, value: 1}, {vlan_23: 23, v…...

ngx_http_request_s

/* 罗剑锋老师的注释参考&#xff1a; https://github.com/chronolaw/annotated_nginx/blob/master/nginx/src/http/ngx_http_request.h */struct ngx_http_request_s {uint32_t signature; /* "HTTP" */ngx_connection_t …...

Docker 学习路线 2:底层技术

了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理&#xff0c;并有助于您更有效地使用该平台。 Linux容器&#xff08;LXC&#xff09; Linux容器&#xff08;LXC&#xff09;是Docker的基础。 LXC是一种轻量级的虚拟化解决方案&#xff0c;允许多个隔离的Linux系…...

UEFI实战——显示图片

一、准备工作 1.1 BMP格式图片 参考:BMP格式详解获取“BMP格式详解”文档里的图片,命名为Logo.bmp将Logo.bmp图片放到U盘里,U盘格式FAT32二、实例代码 2.1 代码结构 TextPkg/ ├── Display.c ├── GetFile.c ├── Test.c ├── Test.dsc ├── Test.h └── Tes…...

Ansible中的playbook

目录 一、playbook简介 二、playbook的语法 三、playbook的核心组件 四、playbook的执行命令 五、vim 设定技巧 六、基本示例 一、playbook简介 1、playbook与ad-hoc相比&#xff0c;是一种完全不同的运用。 2、playbook是一种简单的配置管理系统与多机器部署系统的基础…...

怎样去除视频中的杂音,保留人声部分?

怎样去除视频中的杂音&#xff0c;保留人声部分&#xff1f;这个简单嘛&#xff01;两种办法可以搞定&#xff1a;一是进行音频降噪&#xff0c;把无用的杂音消除掉&#xff1b;二是提取人声&#xff0c;将要保留的人声片段提取出来。 这就将两种实用的办公都分享出来&#xf…...

基于Qt QTreeView|QTreeWidget控件使用简单版

头文件解析: 这是一个C++代码文件,定义了一个名为MainWindow的类。以下是对每一句的详细解释: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H ``` 这是一个条件编译指令,用于避免头文件的重复包含。`MAINWINDOW_H`是一个宏定义,用于唯一标识这个头文件。 ```cpp #…...

edge浏览器的隐藏功能

1. edge://version 查看版本信息 2. edge://flags 特性界面 具体到某一特性&#xff1a;edge://flags/#overlay-scrollbars 3. edge://settings设置界面 详情可参考chrome: 4. edge://extensions 扩展程序页面 5. edge://net-internals 网络事件信息 6. edge://component…...

安卓抓包之小黄鸟

下载安装 下载地址: https://download.csdn.net/download/yijianxiangde100/88496463 安装apk 即可。 证书配置:...

Django中的FBV和CBV

一、两者的区别 1、在我们日常学习Django中&#xff0c;都是用的FBV&#xff08;function base views&#xff09;方式&#xff0c;就是在视图中用函数处理各种请求。而CBV&#xff08;class base view&#xff09;则是通过类来处理请求。 2、Python是一个面向对象的编程语言…...

信息泄露--

大唐电信AC简介 大唐电信科技股份有限公司是电信科学技术研究院&#xff08;大唐电信科技产业集团&#xff09;控股的的高科技企业&#xff0c;大唐电信已形成集成电路设计、软件与应用、终端设计、移动互联网四大产业板块。 大唐电信AC集中管理平台存在弱口令及敏感信息泄漏漏…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...