方法一:广度优先遍历(BFS)

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. int minDepth(TreeNode* root) {
    15. if(root==NULL){
    16. return 0;
    17. }
    18. queue<pair<TreeNode*,int>>q;
    19. q.emplace(root,0);
    20. int result=0;
    21. while(!q.empty()){
    22. TreeNode* head=q.front().first;
    23. int dep=q.front().second;
    24. q.pop();
    25. if(head->left==NULL&&head->right==NULL)
    26. {
    27. result=dep+1;
    28. break;
    29. }
    30. if(head->left!=NULL){
    31. q.emplace(head->left,dep+1);
    32. }
    33. if(head->right!=NULL){
    34. q.emplace(head->right,dep+1);
    35. }
    36. }
    37. return result;
    38. }
    39. };

    方法二:深度遍历(DFS)

    1. class Solution {
    2. public:
    3. int minDepth(TreeNode* root) {
    4. if(root==NULL){
    5. return 0;
    6. }
    7. dfs(root,1);
    8. return result;
    9. }
    10. void dfs(TreeNode* root,int depth){
    11. if(root==NULL){
    12. return;
    13. }
    14. if(root->right==NULL&&root->left==NULL){
    15. if(result>depth){
    16. result=depth;
    17. }
    18. }
    19. dfs(root->left,depth+1);
    20. dfs(root->right,depth+1);
    21. }
    22. int result=INT_MAX;
    23. };