Given a binary tree, find its minimum depth.

求树的最小深度

递归的思想:

递归出口;  if(root==null)return 0;
                   if(root.left==null&&root.right==null){
                         return 1;
                    }

递; int left=run(root.left);遍历左子树;
        int right=run(root.right);遍历右子树

归; if(left==0||right==0)return right+left+1;
        return Math.min(left,right)+1;

public int run(TreeNode root) {
        if(root==null)return 0;
        if(root.left==null&&root.right==null){
            return 1;
        }
        int left=run(root.left);
        int right=run(root.right);
        if(left==0||right==0)return right+left+1;
        return Math.min(left,right)+1;
    }

weixin151云匹面粉直供微信小程序+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
以下是用 C 语言实现的代码: ```c #include <stdio.h> #include <stdbool.h> #include <stdlib.h> /* 二叉树结点 */ struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; }; /* 队列结点 */ struct QueueNode { struct TreeNode* data; struct QueueNode* next; }; /* 队列 */ struct Queue { struct QueueNode* front; struct QueueNode* rear; }; /* 创建队列 */ struct Queue* createQueue() { struct Queue* queue = (struct Queue*)malloc(sizeof(struct Queue)); queue->front = queue->rear = NULL; return queue; } /* 判断队列是否为空 */ bool isQueueEmpty(struct Queue* queue) { return queue->front == NULL; } /* 入队 */ void enqueue(struct Queue* queue, struct TreeNode* data) { struct QueueNode* newNode = (struct QueueNode*)malloc(sizeof(struct QueueNode)); newNode->data = data; newNode->next = NULL; if (isQueueEmpty(queue)) { queue->front = queue->rear = newNode; } else { queue->rear->next = newNode; queue->rear = newNode; } } /* 出队 */ struct TreeNode* dequeue(struct Queue* queue) { if (isQueueEmpty(queue)) { return NULL; } else { struct TreeNode* data = queue->front->data; struct QueueNode* temp = queue->front; queue->front = queue->front->next; if (queue->front == NULL) { queue->rear = NULL; } free(temp); return data; } } /* 判断是否为完全二叉树 */ bool isCompleteTree(struct TreeNode* root) { if (root == NULL) { return true; } struct Queue* queue = createQueue(); enqueue(queue, root); bool flag = false; while (!isQueueEmpty(queue)) { struct TreeNode* temp = dequeue(queue); if (temp->left) { if (flag) { return false; } enqueue(queue, temp->left); } else { flag = true; } if (temp->right) { if (flag) { return false; } enqueue(queue, temp->right); } else { flag = true; } } return true; } /* 创建二叉树 */ struct TreeNode* createTree() { int val; scanf("%d", &val); if (val == -1) { return NULL; } struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode)); root->val = val; root->left = createTree(); root->right = createTree(); return root; } /* 主函数 */ int main() { struct TreeNode* root = createTree(); if (isCompleteTree(root)) { printf("It is a complete binary tree.\n"); } else { printf("It is not a complete binary tree.\n"); } return 0; } ``` 原理: 完全二叉树(Complete Binary Tree)是指除了最后一层外,其他层的结点数都达到了最大值,最后一层的结点都集中在左侧。而对于一棵二叉树,如果它的层数为 h,那么它最多有 $2^h-1$ 个结点。因此,我们可以利用层序遍历的方式,对二叉树进行遍历,如果遇到某个结点缺少左子结点或右子结点,那么后续的结点必须全部为叶子结点,否则这棵二叉树就不是完全二叉树。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值