我特别喜欢一个博主,大家都叫他Carl
用Carl的话说,高度与深度的区别为:
二叉树节点的深度
:指从根节点到该节点的最长简单路径边的条数。
二叉树节点的高度
:指从该节点到叶子节点的最长简单路径边的条数。
好了,知识点到此结束。
当然不是!接下来我用两道题,来带大家入门
二叉树的最小深度
问题:给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
/**
* 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 minDepth(TreeNode* root) {
if(root==nullptr) return 0;
if(root->left==nullptr && root->right==nullptr) return 1; // && 用的至关重要--为了防止 root = [2,null,3,null,4,null,5,null,6] 这种情况
int minDepth1 = INT32_MAX;
if(root->left!=nullptr){
minDepth1 = min(minDepth1,minDepth(root->left));
}
if(root->right!=nullptr){
minDepth1 = min(minDepth1,minDepth(root->right)); //
}
return minDepth1+1; // 用于检测从底层到顶端,到顶端距离,依次递增。
}
};
平衡二叉树
问题:给定一个二叉树,判断它是否是 平衡二叉树
class Solution {
int getNum(TreeNode* root){
// 结束条件
if(root==nullptr) return 0;
// ♻️条件
int leftNum = getNum(root->left);
if(leftNum==-1) return -1;
int rightNum = getNum(root->right);
if(rightNum==-1) return -1;
if(abs(leftNum-rightNum)>1) return -1;// 定义一个结束状态
return max(leftNum,rightNum)+1;
}
public:
bool isBalanced(TreeNode* root) {
if(getNum(root)==-1){
return false;
}else{
return true;
}
}
};
这两道是代码随想录上的经典题,对以后面试也有帮助,望大家掌握
收获:
二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。