【BFS&递归】求二叉树最小高度

1.题目:求二叉树最小高度

【LeetCode111】:判断一棵二叉树的最小高度:
Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.

Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: 2

2.思路分析

起点就是 root 根节点,终点就是最靠近根节点的那个「叶子节点」嘛,叶子节点就是两个子节点都是 null 的节点。采用BFS,每一层结点同时入队列,找到叶子结点即终止。
注意:在加入叶子结点时,需左右分别独立判断是否加入队列。

3.源码

/**
 * 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==NULL) return 0;
        queue<TreeNode* > save;
        
        //记录步数:step
        int step=1;
        
        //根节点入队列
        save.push(root);
        while(!save.empty())
        {
            int qsize=save.size();
            for(int i=0;i<qsize;i++)
            {
                TreeNode* new1=save.front();
                save.pop();
                if((new1->left==NULL)&&(new1->right==NULL))
                return step;
                else
                {
                    if(new1->left!=NULL)
                        save.push(new1->left);
                     if(new1->right!=NULL)
                        save.push(new1->right);
                }                            
            }                      
          step++;  
        }
         return step;
    }   
};

4.递归算法求最小高度

注意一定要抓住最小高度的判定条件!是出现叶子结点,即左右结点都为空
因此不能单纯以左右节点最小值为最小高度路径,前提是左右节点均不空。
[2,null,3,null,4,null,5,null,6]该树结构比较特别

class Solution {
public:
    int minDepth(TreeNode* root) {

        if(root==NULL) return 0;
        int left=minDepth(root->left);
        int right=minDepth(root->right);
       // cout<<root->val<<"当前值"<<endl;
        if(left==0) return right+1;
        else if(right==0) return left+1;
        if(left>right)
        return right+1;
        else 
            return left+1;     
    }   
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是二叉树高度和宽度的完整代码(Python实现): ```python # 定义二叉树节点类 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right # 计算二叉树高度的函数 def get_tree_height(root): if not root: return 0 left_height = get_tree_height(root.left) right_height = get_tree_height(root.right) return max(left_height, right_height) + 1 # 计算二叉树宽度的函数 def get_tree_width(root): if not root: return 0 queue = [(root, 0)] cur_level = 0 cur_level_width = 0 max_width = 0 while queue: node, level = queue.pop(0) if level == cur_level: cur_level_width += 1 else: max_width = max(max_width, cur_level_width) cur_level = level cur_level_width = 1 if node.left: queue.append((node.left, level + 1)) if node.right: queue.append((node.right, level + 1)) max_width = max(max_width, cur_level_width) return max_width # 测试代码 if __name__ == '__main__': root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) root.right.right = TreeNode(7) print('树的高度为:', get_tree_height(root)) print('树的宽度为:', get_tree_width(root)) ``` 输出结果: ``` 树的高度为: 3 树的宽度为: 4 ``` 其中,`get_tree_height`函数用来计算二叉树高度,采用递归方式解。`get_tree_width`函数用来计算二叉树的宽度,采用BFS(广度优先搜索)算法,遍历每一层节点并统计宽度。测试代码中构建了一个示例二叉树,并输出了它的高度和宽度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值