zoukankan      html  css  js  c++  java
  • 树、递归、广度优先搜索(BFS)————二叉树的最小深度

    解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加1

    要确定的是,一定要保证初始输入的节点是有子节点的。因为可能出现只有单子树的情况,所以要先确认这种情况。

    具体过程:

    1、分析初始条件

    空指针:深度为0

    单节点:深度为1

    1、先确定递归基本条件:

    节点指针为空,说明深度为0,返回深度0;

    如果到了叶节点,说明其左右两节点指针就是空,也就是在深度为0的基础上加上该节点所在的一层,即1+调用空指针的递归函数

    2、找最近的叶节点,也就是左右指针都是空的叶节点的时候。

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int minDepth(TreeNode* root) {
    13         if(root==NULL) return 0;//root节点是空节点,深度为0
    14         15         if(!root->right && !root->left) return 1;//只有一个节点,深度就是1
    16         if(!root->left){//左节点空,右节点非空,在右子树里面找最近的叶子节点
    17             return 1+minDepth(root->right);
    18         }
    19         if(!root->right){//右节点空,左节点非空,在左子树里面找最近的叶子节点
    20             return 1+minDepth(root->left);
    21         }
    22         //两个节点都非空,那就继续迭代下一层
    23         return 1+min(minDepth(root->left),minDepth(root->right));
    24     }
    25 };

    方法二:

    BFS,广度优先搜索 每次把一层节点压入队列,同时判断这些节点中是否含有叶子节点(即左右指针都为空),若有,说明找到了最近的那个叶子节点,返回层数。

     1 class Solution {
     2 public:
     3     int minDepth(TreeNode* root) {
     4         if(root==NULL) return 0;  //判空
     5         queue<pair<TreeNode*,int>> que;  //把节点和所在的层数绑定
     6         que.push(make_pair(root,1)); //压入根节点,层数为1
     7         while(1)
     8         {
     9             TreeNode* node=que.front().first; //当前节点
    10             int level=que.front().second;  //层数
    11             que.pop();
    12             if (!node->left && !node->right) return level;//遇到叶子节点
    13             if(node->left) //压入左节点
    14                 que.push(make_pair(node->left,level+1));
    15             if(node->right)//压入右节点
    16                 que.push(make_pair(node->right,level+1));
    17         }
    18     }
    19 };
  • 相关阅读:
    ffmpeg常用命令集合
    Django传文件(FILES用法)
    Flask传文件(files用法)
    docker 部署redis服务
    tomcat启动报错ContainerBase.addChild: start
    Echarts折线图 y轴刻度数值与实际值不符解决方法
    春招日记
    Leetcode5700. 使所有区间的异或结果为零(DP)
    VS2015拖动调整代码窗口奔溃
    图床搭建
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11069583.html
Copyright © 2011-2022 走看看