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

二叉树的三个简单题

1、二叉树的第k个结点 

 思路解析

由题可知这是一棵二叉搜索树

它或者是一棵空树,或者是具有下列性质的二叉树: 

1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 

2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 

3. 它的左、右子树也分别为二叉搜索树。

所以,当中序遍历这棵二叉搜索树的时候,结果为升序,本题求第k个最小的结点,也就是中序遍历第k次的结点,直接返回。

代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* ans;TreeNode* kthNode(TreeNode* root, int k) {//二叉搜索树中序遍历为有序dfs(root, k);return ans;}void dfs(TreeNode* root, int &k){if(!root) return;//中序遍历 每遍历一个结点就将k-1,k为0表示为第k小的结点dfs(root -> left, k);k --;if(!k) ans = root;if(k > 0) dfs(root -> right, k);}
};

2、二叉树的深度 

 思路解析

利用递归思想;二叉树的深度=左右子树的最大深度+1;

代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int treeDepth(TreeNode* root) {//如果当前节点为空结点返回0 否则返回左右子树的深度最大值+1;if(!root) return 0;return max(treeDepth(root -> left), treeDepth(root -> right)) + 1;}
};

3、平衡二叉树

 思路解析

计算左子树深度,右子树深度;如果每一对左右子树深度之差都不大于1,则返回真,否则为假。

代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool ans = true;bool isBalanced(TreeNode* root) {dfs(root);return ans;}int dfs(TreeNode* root){//求左子树和右子树的深度 当左右子树相差大于1 说明不是平衡二叉树 ans=falseif(!root) return 0;int left = dfs(root -> left);int right = dfs(root -> right);if(abs(left - right) > 1) ans = false;return max(left, right) + 1;}
};

总结

今天做了几个二叉树的基础题,思路都能明白,但是细节上总会丢三落四,导致代码死循环等等,做这三个简单题复习了一下二叉搜索树、二叉平衡树的概念以及二叉树的深度递归算法,总之很有收获!希望大家喜欢。


http://www.mrgr.cn/news/12266.html

相关文章:

  • 速盾:cdn可以解决带宽问题么
  • GalaChain 全面剖析:为 Web3 游戏和娱乐而生的创新区块链
  • QT中通过Tcp协议的多线程的文件传输(服务器)
  • 3 Docker 镜像推送
  • 鸿蒙验证码,鸿蒙认证服务验证码,鸿蒙云存储上传图片
  • 华裔二、三代长相变迁的多维度解析
  • 利用深度学习技术来实现街景图像的语义分割(街景图像语义分割)
  • 如何使用 Nginx 解决跨域问题 (CORS)
  • uni-app - - - - - 自定义tabbar
  • 使用 OpenCV 组合和缩放多张图像
  • DDPM/DDIM去噪扩散概率模型和GANs
  • 查看redis节点的连接数
  • 多态(c++)
  • pytorch深度学习基础 8(CIFRA-10基础篇1)
  • 常用的 Redis 配置命令
  • 述FunsorFunsor是一个类似张量的函数和分布库。概率规划的泛函张量获取系统描述 ppl,pyro的衍生项目,人工智能python编程 ,深度神经网络
  • MyBatis之注解使用
  • 九、枚举和注解
  • npm install报错,解决记录:11个步骤诊断和解决问题
  • PowerShell | git log 中文乱码问题解决