C++ 二叉树代码

server/2025/3/4 18:51:46/

二叉树代码,见下

#include <iostream>
using namespace std;template<typename T>
struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL)TreeNode(T x):val(x), left(NULL), right(NULL){}
};template<typename T>
class Tree(){
private:TreeNode<T> *nodes;TreeNode<T> *root;size_t nodeSize;TreeNode<T> *Create(T a[], int size, int nodeId, T nullNode);void visit(TreeNode<T> *node);void preOrder(TreeNode<T> *node);void inOrder(TreeNode<T> *node);void postOrder(TreeNode<T> *node);void levelOrder(TreeNode<T> *node);
public:Tree();Tree(int maxNodes);~Tree();TreeNode<T>* GetTreeNode(int id);void CreateTree(T a[], int size, T nullNode);void preOrderTraversal();void inOrderTraversal();void postOrderTraversal();	
};template<typename T>
Tree<T>::Tree(){nodeSize = 100001;nodes = new TreeNode<T>[nodeSize]
}template<typename T>
Tree<T>::Tree(int maxNodes){nodeSize = maxNodes;nodes = new TreeNode<T>[nodeSize];
}template<typename T>
TreeNode<T>* Tree<T>::GetTreeNode(int id){return &nodes[id];
}template<typename T>
void Tree<T>::visit(TreeNode<T> *node){cout << node->val;
}template<typename T>
void Tree<T>::preOrder(TreeNode<T> *node){if(node){visit(node);preOrder(node->left);preOrder(node->right);}
}template<typename T>
void Tree<T>::inOrder(TreeNode<T> *node){if(node){inOrder(node->left);visit(node);inOrder(node->right);}
}template<typename T>
void Tree<T>::postOrder(TreeNode<T> *node){if(node){postOrder(node->left);postOrder(node->right);visit(node);}
}template<typename T>
void Tree<T>::CreatTree(T a[], int size, T nullnode){root = Create(a, size, 1, nullnode);
}template<typename T>
TreeNode<T>* Tree<T>::Create(T a[], int size, int nodeId, T nullnode){if(nodeId >= size || a[nodeId] == nullnode){return NULL;}TreeNode<T> *nowNode = GetTreeNode(nodeId);nowNode->val = a[nodeId];nowNode->left = Create(a, size, nodeId*2, nullnode);nowNode->right = Create(a, size, nodeId*2+1, nullnode);return nownode;	
}template<typename T>
void Tree<T>::preOrderTraversal(){preOrder(root);
}template<typename T>
void Tree<T>::inOrderTraversal(){inOrder(root);
}template<typename T>
void Tree<T>::postOrderTraversal(){postOrder(root);
}
int main()
{cout << "Hello World";return 0;
}

二叉树代码,对应力扣,完全二叉树的节点个数

/*** 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 countNodes(TreeNode* root) {if(root == NULL){return 0;}int lc = countNodes(root->left);int rc = countNodes(root->right);return lc + rc + 1;}
};

代码练习,对应力扣单值二叉树,代码见下

/*** 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:bool isUnivalTree(TreeNode* root) {if(root == NULL){return true;}if(root->left){if(root->val != root->left->val){return false;}if(!isUnivalTree(root->left)){return false;}}if(root->right){if(root->val != root->right->val){return false;}if(!isUnivalTree(root->right)){return false;}}return true;}
};

代码四,对应力扣 二叉树的前序遍历,代码见下

/*** 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:vector<int> ret;void preorder(TreeNode *root){if(root){ret.push_back(root->val);preorder(root->left);preorder(root->right);}}vector<int> preorderTraversal(TreeNode* root) {ret.clear();preorder(root);return ret;}
};

代码五,对应力扣,二叉树的中序遍历,代码见下

/*** 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:vector<int> ret;void inorder(TreeNode *root){if(root){inorder(root->left);ret.push_back(root->val);inorder(root->right);}}vector<int> inorderTraversal(TreeNode* root) {ret.clear();inorder(root);return ret;}
};

代码六,对应力扣,二叉树的后续遍历

/*** 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 {vector<int> ret;void postorder(TreeNode *root){if(root){postorder(root->left);postorder(root->right);ret.push_back(root->val);}}
public:vector<int> postorderTraversal(TreeNode* root) {ret.clear();postorder(root);return ret;}
};

代码,对应力扣,翻转二叉树,代码见下

/*** 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:TreeNode* invertTree(TreeNode* root) {if(root == NULL){return NULL;}TreeNode* l = invertTree(root->left);TreeNode* r = invertTree(root->right);root->left = r;root->right = l;return root;}
};


http://www.ppmy.cn/server/172406.html

相关文章

Deepseek Api Function Calling解析(tools、tool_calls)Deepseek函数调用流程图、Python代码示例

文章目录 Function Calling介绍**核心原理**1. **动态扩展模型能力**2. **JSON结构化交互** **实现步骤**&#xff08;以支持Function Calling的模型为例&#xff09;1. **定义可用函数**2. **模型匹配与生成**3. **开发者执行函数**4. **结果反馈给模型** **DeepSeek R1的当前…

Vue核心知识:动态路由实现完整方案

在Vue中实现动态路由&#xff0c;并结合后端接口和数据库表设计&#xff0c;是一个复杂的项目&#xff0c;需要多个技术栈和步骤的配合。以下将详细描述整个实现过程&#xff0c;包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…

【OpenCV C++】以时间命名存图,自动检查存储目录,若不存在自动创建, 按下空格、回车、Q、S自动存图

文章目录 // 保存图像的函数 void saveImage(const cv::Mat& frame) {// 生成唯一文件名auto now = std::chrono::system_clock::

Hutool - POI:让 Excel 与 Word 操作变得轻而易举

各位开发者们&#xff0c;在日常的 Java 开发工作里&#xff0c;处理 Excel 和 Word 文件是相当常见的需求。无论是从 Excel 里读取数据进行分析&#xff0c;还是将数据写入 Excel 生成报表&#xff0c;亦或是对 Word 文档进行内容编辑&#xff0c;传统的 Apache POI 库虽然功能…

记录深度学习中有用的终端命令

1 查看 CUDA 版本 如果你安装了 CUDA 开发工具包&#xff0c;你可以使用 nvcc 命令来查看 CUDA 的版本。 打开终端&#xff08;或命令提示符&#xff09;&#xff0c;运行&#xff1a; nvcc --version 2. 监控 GPU 状态 使用 nvidia-smi 命令&#xff0c;nvidia-smi 是一个…

vue全局注册组件

1、Vue.component 是 Vue 提供的一个全局 API&#xff0c;用于注册一个全局组件。这意味着你可以在应用的任何地方使用这个组件&#xff0c;而无需再次引入。 使用方法&#xff1a; import Vue from vue; import MyComponent from ./MyComponent.vue;// 注册全局组件 Vue.com…

DeepSeek R1 训练策略4个阶段解析

DeepSeek R1 训练策略解析 DeepSeek R1 训练策略解析1. 冷启动监督微调&#xff08;Cold Start SFT&#xff09;**该阶段的主要目标**&#xff1a; 2. 面向推理的强化学习&#xff08;RL for Reasoning&#xff09;**该阶段的主要目标**&#xff1a; 3. 拒绝采样和监督微调&…

正大杯攻略|非量表题数据分析基本步骤

在各类研究和调查场景中&#xff0c;非量表类问卷作为数据收集的重要工具&#xff0c;其分析方法涵盖多个关键环节&#xff0c;对于精准解读数据、提炼有价值的结论起着决定性作用。下面详细介绍非量表类问卷的分析方法。 一、样本背景分析 样本背景分析借助描述性统计方法&am…