您的位置:首页 > 房产 > 建筑 > 服装设计自学软件_中国光刻机最新消息_5118关键词挖掘工具_搜索大全浏览器

服装设计自学软件_中国光刻机最新消息_5118关键词挖掘工具_搜索大全浏览器

2025/2/23 13:33:04 来源:https://blog.csdn.net/m0_74317866/article/details/142880990  浏览:    关键词:服装设计自学软件_中国光刻机最新消息_5118关键词挖掘工具_搜索大全浏览器
服装设计自学软件_中国光刻机最新消息_5118关键词挖掘工具_搜索大全浏览器

文章目录

  • 计算布尔二叉树的值
  • 求根节点到叶节点数字之和
  • 二叉树剪枝
  • 验证二叉搜索树
  • 二叉搜索树中第 K 小的元素
  • 二叉树的所有路径

二叉树中的深搜有三种方法

  • 前序遍历
    根->左子树->右子树

  • 中序遍历
    左子树->根->右子树

  • 前序遍历
    左子树->右子树->根

计算布尔二叉树的值

题目:计算布尔二叉树的值

在这里插入图片描述

思路

  • 如果当前节点node 为叶子节点,那么节点的值为它本身
  • 如果当前节点 node 含有孩子节点,对其孩子节点进行递归,计算出其左右孩子节点的值为;
    • 如果node == 2,返回两孩子节点的|运算结果;如果node == 3,返回两孩子节点的&运算结果;

因为是完全二叉树:每个节点有 0 个或者2 个孩子的二叉树。
所以对于递归出口,我们仅需判断当前节点的左孩子是否为空,如果为空,则当前节点为叶子节点;

C++代码

/*** 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 evaluateTree(TreeNode* root) {if (root->left == nullptr) {return root->val;} if (root->val == 2) return evaluateTree(root->left) || evaluateTree(root->right);elsereturn evaluateTree(root->left) && evaluateTree(root->right);}
};

求根节点到叶节点数字之和

题目:求根节点到叶节点数字之和

在这里插入图片描述

思路

  • 从根节点开始,遍历每个节点,如果遇到叶子节点,则将叶子节点对应的数字加到数字之和。如果当前节点不是叶子节点,则计算其子节点对应的数字,然后对子节点递归遍历。

在这里插入图片描述

C++代码

/*** 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 dfs(TreeNode *root, int preSum){preSum = preSum * 10 + root->val;if(root->left == nullptr && root->right == nullptr)return preSum;int res = 0;if(root->left) res += dfs(root->left, preSum);if(root->right) res += dfs(root->right, preSum);return res; }int sumNumbers(TreeNode* root) {return dfs(root, 0);}
};

二叉树剪枝

题目:二叉树剪枝

在这里插入图片描述
思路

返回移除了所有不包含 1的子树的原二叉树。
意思即,删除所有子树没有1的节点
我们要根据其左右子树的状态来判断当前节点能否删除,所有我们使用后序遍历

C++代码

/*** 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* pruneTree(TreeNode* root) {if(!root){return nullptr;}root->left = pruneTree(root->left);root->right = pruneTree(root->right);if(!root->left && !root->right && root->val == 0){delete root;root = nullptr;}return root;}
};

验证二叉搜索树

题目:验证二叉搜索树

在这里插入图片描述
思路

二叉搜索树:左子树小于根节点;右子树大于根节点
我们知道,二叉搜索树的中序遍历结果是一个有序的数组,所以我们会有这样一个想法:对其进行中序遍历,并将每一个结果的值保存在一个数组中,最后判断该数组是否有序;

使用一个全局变量存储上一个用于对比的数值

C++代码

/*** 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 
{long prev = LONG_MIN;
public:bool isValidBST(TreeNode* root) {if(!root) return true;if(!isValidBST(root->left)) return false;if (prev != LONG_MIN && (root->val <= prev)) return false;prev = root->val;return isValidBST(root->right);}
};

二叉搜索树中第 K 小的元素

题目:二叉搜索树中第 K 小的元素

在这里插入图片描述

思路

两个全局变量 + 中序遍历

  • 一个来标记,次数count
  • 一个来标记,结果ret

C++代码

/*** 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 
{int count, ret;void dfs(TreeNode* root){if(!root || !count) return ;dfs(root->left);if(!(--count)) ret = root->val;dfs(root->right);}
public:int kthSmallest(TreeNode* root, int k) {count = k;dfs(root);return ret;}   
};

二叉树的所有路径

二叉树的所有路径

题目:二叉树的所有路径

在这里插入图片描述
思路

  • dfs函数中,首先将当前节点的值转换为字符串并添加到 path中。
  • 检查当前节点是否为叶子节点(即没有左子节点和右子节点)。如果是叶子节点,将 path 添加到结果数组 res 中,并返回。
  • 如果当前节点不是叶子节点,则继续递归搜索其左子节点和右子节点。
  • 在递归调用dfs时,对于非叶子节点,需要在path 后添加 ->符号

C++代码

/*** 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 
{void dfs(TreeNode* root, string path, vector<string>& res){   path += to_string(root->val);if(root->left == nullptr && root->right == nullptr) // 叶子节点不添加 "->"{res.push_back(path);return;}if(root->left) dfs(root->left, path + "->", res);if(root->right) dfs(root->right, path + "->", res);return;   }public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> res;string path;dfs(root, path, res);return res;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com