#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
//5种情况:空树;没有子树;只有左/右子树;有俩子树;
struct BinaryNode {BinaryNode *left;BinaryNode *right;int data;
};
struct BinaryTree {BinaryNode *head;
};
//后序遍历递归
//如果左右子树都存在,则取其最小
//如果左右子树没有其中一个,-->说明此根下有叶子结点。所以取其最大
int getDepth(BinaryNode *node)
{if (node == NULL)return 0;int left_depth = getDepth(node->left);int right_depth = getDepth(node->right);if (left_depth && right_depth)  //左子树和右子树都存在return min(left_depth, right_depth) + 1;elsereturn max(left_depth, right_depth) + 1;
}
//层次遍历,使用队列完成
int getDepth2(BinaryNode *root)
{if (root == NULL)return 0;queue<BinaryNode *>q;q.push(root);int depth = 0;while (!q.empty())   //q存放当前层结点,qt存放下一层结点{queue<BinaryNode *>qt;depth++;while (!q.empty()){BinaryNode *temp = q.front();cout << temp->data << endl;q.pop();if (!temp->left && !temp->right){return depth;}if (temp->left)qt.push(temp->left);  if (temp->right)qt.push(temp->right);}q = qt;}return depth;
}int main()
{/*7/   \8     9/       \4         10/ \2   5   */BinaryTree btree;BinaryNode node1 = { NULL,NULL,7};BinaryNode node2 = { NULL,NULL,9 };BinaryNode node3 = { NULL,NULL,8 };BinaryNode node4 = { NULL,NULL,4 };BinaryNode node5 = { NULL,NULL,2 };BinaryNode node6 = { NULL,NULL,5 };BinaryNode node7 = { NULL,NULL,10 };btree.head = &(node1);node1.left = &(node3);node1.right = &(node2);node2.right = &(node7);node3.left = &(node4);node4.left = &(node5);node4.right = &(node6);int height = getDepth2(&(node1));cout << height << endl;}

运行结果:

Leedcode1-求树的最小高度相关推荐

  1. 关于取整符号(二叉树具有n个结点的m次树的最小高度⌈logₘ(n(m-1)+1)⌉)

    性质4 具有n个结点的m次树的最小高度为 关于取整符号:向上取整⌈⌉和向下取整⌊⌋符号 向下取整的运算称为Floor,用数学符号 ⌊ ⌋ 表示:向上取整的运算称为Ceiling,用数学符号 ⌈ ⌉ 表 ...

  2. 贪心法求树的最小支配集,最小点覆盖,最大独立集

    原文地址(转自 Ashly的博客) 定义: 最小支配集:对于图G = (V, E) 来说,最小支配集指的是从 V 中取尽量少的点组成一个集合, 使得 V 中剩余的点都与取出来的点有边相连.也就是说,设 ...

  3. 树的最小高度 Minimum Height Trees

    2019独角兽企业重金招聘Python工程师标准>>> 问题: For a undirected graph with tree characteristics, we can ch ...

  4. 树形DP求树的最小支配集,最小点覆盖,最大独立集

    转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合 ...

  5. JavaC++题解与拓展——leetcode310.最小高度树【复习链式前向星】

    每日一题做题记录,参考官方和三叶的题解 目录 题目要求 思路一:动态规划 Java 链式前向星 C++ 思路二:拓扑排序+BFS Java C++ 总结 题目要求 思路一:动态规划 遍历整个图,当前遍 ...

  6. [UVA-1218] Perfect Service(树的最小支配集)

    题目链接:https://vjudge.net/problem/UVA-1218 题目大意:给你一棵无向树,让你求树的最小支配集,但是有一个要求是除最小支配集外剩下的任何一个结点不能同时连接支配集中的 ...

  7. 二叉搜索树-创建最小高度树(递归)

    题意: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 这里回忆一下二叉搜索树的概念: 对于树中的所有子树都有,左子树上的值都小于根节点的值,右子树上的值 ...

  8. 【数据结构与算法】之深入解析“最小高度树”的求解思路与算法示例

    一.题目要求 树是一个无向图,其中任何两个顶点只通过一条路径连接.换句话说,一个任何没有简单环路的连通图都是一棵树. 给你一棵包含 n 个节点的树,标记为 0 到 n - 1,给定数字 n 和一个有 ...

  9. 换根dp求树所有节点的最小深度

    链接:https://ac.nowcoder.com/acm/contest/18072/A 牛妹有一张连通图,由n个点和n-1条边构成,也就是说这是一棵树,牛妹可以任意选择一个点为根,根的深度为0, ...

最新文章

  1. 2014西安 H 有向图博弈 UVALive-7042
  2. Nginx 403 Forbidden 排错记录汇总
  3. 英语网络聊天中的一些习惯性缩写
  4. LeetCode176 第二高的薪水
  5. 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组
  6. 《你不知道的JavaScript(上卷)》读书笔记
  7. mysql故障排查思路_Mysql高负载排查思路
  8. 序列(【CCF】NOI Online能力测试 提高组第一题)
  9. Android自定义之流式布局
  10. python实现自动化打印
  11. KITTI数据集无法下载的解决方法
  12. javascript 分割字符串
  13. 财务航天开票系统无法打印发票汇总明细,该系统打印发票正常,连其他打印机打印A4正常
  14. Angular 从入坑到挖坑 - 路由守卫连连看
  15. 中水是什么?有什么用途呢?
  16. Android 10.0 修改Recovery字体图片的大小(正在清理)文字大小
  17. [ZT]:fancy设置latex页眉页脚
  18. LocalDateTime用法
  19. pyqt UI设计以及pyuic工具的使用
  20. Error:A problem occurred configuring project ‘:app‘. > Failed to find target with hash string ‘andro

热门文章

  1. JAVA SSM框架+Redis 实现单点登录
  2. Linux学习Vim使用及账号用户管理
  3. mysql is needed by_libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64
  4. 每个计算机系的学生都学离散数学,离散数学一阶逻辑精要.ppt
  5. 数控车椭圆编程实例带图_数控车床编程教程,图文实例详解
  6. go 修改结构体方法_Go36-13-结构体及其方法
  7. Maven学习(三)————Maven核心概念(二)
  8. 计数方法应用于PTB数据集
  9. junit 单元测试报错java.lang.NoClassDefFoundError
  10. pillow python 划线_Python-PIL(pillow)图片处理入门(一)