给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
思路:
计算出从根节点到每个叶子节点的深度,通过比较维护min的值。
当前节点的最小节点为:
min(左孩子最小深度, 右孩子最小深度)+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 minDepth(TreeNode* root) {
if(root == nullptr)
return 0;
int cur = 0;
int min = 10000;
depth(root, cur, min);
return min;
}
void depth(TreeNode* root, int cur,int& min)
{
if(root == nullptr)
return;
if(root->left == nullptr && root->right == nullptr)
{
min = min>(cur+1)?(cur+1):min;
}
depth(root->left, cur+1, min);
depth(root->right, cur+1, min);
}
};
leetcode112
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。
/**
* 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 hasPathSum(TreeNode* root, int sum) {
if(root == nullptr)
return false;
bool result = false;
search(root, sum, result);
return result;
}
void search(TreeNode* root, int sum, bool& res)
{
if(root == nullptr)
{
return;
}
sum-=root->val;
if(root->left == nullptr && root->right == nullptr&&sum==0)
{
res = true;
}
search(root->left, sum, res);
search(root->right, sum, res);
}
};
注意是从根节点到叶子节点。