1. /*************************************************************************
  2. > File Name: 37_TreeDepth.cpp
  3. > Author: Juntaran
  4. > Mail: JuntaranMail@gmail.com
  5. > Created Time: 2016年09月03日 星期六 09时49分38秒
  6. ************************************************************************/
  7.  
  8. #include <stdio.h>
  9. #include <malloc.h>
  10. #include <math.h>
  11.  
  12. // 二叉树结构体
  13. struct BinaryTree
  14. {
  15. int val;
  16. struct BinaryTree* left;
  17. struct BinaryTree* right;
  18. };
  19.  
  20. BinaryTree* createTree()
  21. {
  22. BinaryTree* root = (BinaryTree*)malloc(sizeof(BinaryTree));
  23. root->val = ;
  24. root->left = (BinaryTree*)malloc(sizeof(BinaryTree));
  25. root->left->val = ;
  26. root->right = (BinaryTree*)malloc(sizeof(BinaryTree));
  27. root->right->val = ;
  28. root->left->left = (BinaryTree*)malloc(sizeof(BinaryTree));
  29. root->left->left->val = ;
  30. root->left->left->left = NULL;
  31. root->left->left->right = NULL;
  32. root->left->right = (BinaryTree*)malloc(sizeof(BinaryTree));
  33. root->left->right->val = ;
  34. root->left->right->right = NULL;
  35. root->left->right->left = (BinaryTree*)malloc(sizeof(BinaryTree));
  36. root->left->right->left->val = ;
  37. root->left->right->left->left = NULL;
  38. root->left->right->left->right = NULL;
  39. root->right->right = (BinaryTree*)malloc(sizeof(BinaryTree));
  40. root->right->right->val = ;
  41. root->right->left = NULL;
  42. root->right->right->left = NULL;
  43. root->right->right->right = NULL;
  44. // root->right->right->right = (BinaryTree*)malloc(sizeof(BinaryTree));
  45. // root->right->right->right->val = 8;
  46. // root->right->right->right->left = root->right->right->right->right = NULL;
  47.  
  48. return root;
  49. }
  50.  
  51. // 二叉树中序遍历
  52. void InOrder(BinaryTree* root)
  53. {
  54. if (root == NULL)
  55. return;
  56.  
  57. InOrder(root->left);
  58. printf("%d ", root->val);
  59. InOrder(root->right);
  60. }
  61.  
  62. // 二叉树的深度
  63. int TreeDepth(BinaryTree* root)
  64. {
  65. if (root == NULL)
  66. return ;
  67.  
  68. int left = TreeDepth(root->left);
  69. int right = TreeDepth(root->right);
  70.  
  71. return (left>right) ? (left+) : (right+);
  72. }
  73.  
  74. // 判断一棵树是不是平衡二叉树
  75. bool isBalanced(BinaryTree* root)
  76. {
  77. if (root == NULL)
  78. return true;
  79.  
  80. int left = TreeDepth(root->left);
  81. int right = TreeDepth(root->right);
  82.  
  83. int diff = abs(left - right);
  84. if (diff > )
  85. return false;
  86.  
  87. return isBalanced(root->left) && isBalanced(root->right);
  88. }
  89.  
  90. // 后序遍历方法
  91. bool isBalanced2(BinaryTree* root, int* depth)
  92. {
  93. if (root == NULL)
  94. {
  95. *depth = ;
  96. return true;
  97. }
  98. int left, right;
  99. if (isBalanced2(root->left, &left) && isBalanced2(root->right, &right))
  100. {
  101. int diff = abs(left - right);
  102. if (diff <= )
  103. {
  104. *depth = + (left>right ? left : right);
  105. return true;
  106. }
  107. }
  108. return false;
  109. }
  110.  
  111. bool isBalanced2(BinaryTree* root)
  112. {
  113. int depth = ;
  114. return isBalanced2(root, &depth);
  115. }
  116.  
  117. int main()
  118. {
  119. BinaryTree* test = createTree();
  120. InOrder(test);
  121. int depth = TreeDepth(test);
  122. printf("\ndepth is %d\n", depth);
  123. if (isBalanced2(test) == true)
  124. printf("Balance\n");
  125. else
  126. printf("No Balance\n");
  127.  
  128. }

剑指Offer37 二叉树深度与平衡二叉树判断的更多相关文章

  1. 剑指Offer-37.二叉树的深度(C++/Java)

    题目: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 递归求解左右子树的最大值即可,每遍历到一个结点,深度加1,最后 ...

  2. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  3. 剑指Offer——二叉树

    剑指Offer--二叉树 前言 数据结构通常是编程面试中考察的重点.在参加面试之前,应聘者需要熟练掌握链表.树.栈.队列和哈希表等数据结构,以及它们的操作.本片博文主要讲解二叉树操作的相关知识,主要包 ...

  4. JS数据结构与算法 - 剑指offer二叉树算法题汇总

    ❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...

  5. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

  6. 【剑指Offer】39、平衡二叉树

      题目描述:   输入一棵二叉树,判断该二叉树是否是平衡二叉树.这里的定义是:如果某二叉树中任意结点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树.   解题思路:   首先对于本题我们要 ...

  7. 剑指offer 二叉树中和为某一个值的路径

    剑指offer 牛客网 二叉树中和为某一个值的路径 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 15:53:58 2 ...

  8. 剑指offer 二叉树的层序遍历

    剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...

  9. 剑指offer(39)平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目分析 第一种方法: 正常思路,应该会获得节点的左子树和右子树的高度,然后比较高度差是否小于1. 可是这样有一个问题,就是节点重复遍历了,影 ...

随机推荐

  1. 一个模拟"显示桌面.scf"程序的JS小函数

    有时候我们或许有这样的一个需求,用JS模拟这样一个动作,同时按下组合快捷键:Windows旗帜键+D键,下面这个函数就可以帮到我们了. function f_ToggleDesktop() { var ...

  2. JavaScript谁动了你的代码

    到目前为止,同学你知道了JavaScript的历史,也了解其"你想是啥就是啥"的变量系统.相信凭借你深厚的Java或者C++功底,再加上程序员特有的自傲气质,你肯定会信心满满:自信 ...

  3. 利用FlashPaper实现类似百度文库功能

    最近需要实现一个类似百度文库的功能,在Google上淘了一段时间,发现FlashPaper还算能够不错的实现此需求. 首先讲下思路: 1>安装FlashPaper: 2>利用java代码将 ...

  4. 浅析WINFORM工具条的重用实现

    一直以来,我都想看看别人家的工具栏重用(图1)到底是如何实现的,但在网上搜索了很久都没有找到过,即使找到一些程序,要么就是把这个工具栏写在具体的画面(图2),要么就是没有源代码的, 我在想,是否别人也 ...

  5. missing artifact com.oracle:ojdbc14:jar:10.2.0.2.0解决办法

    下载jar,导入到maven中 下载:http://download.csdn.net/detail/spring123tt/6991897 cmd中输入: mvn install:install-f ...

  6. OAB配置

    OAB管理: http://blogs.technet.com/b/exchange_chs/archive/2013/01/31/exchange-server-2013-oab-managing- ...

  7. CSDN问答频道“华章杯”7月排行榜活动开始,丰厚奖品等你拿

    CSDN问答频道月度排行榜,是CSDN问答频道从3月开始举办的活动,旨在鼓励更多用户参与提问和解答,创造一个良好的互帮互助氛围,使参与者在问和答的过程中得到技术水平的提升,也希望大家能在技术交流中结交 ...

  8. hdu 4597 Play Game 区间dp

    Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=459 ...

  9. [Express] Level 1: First Step

    Installing Express Let's start building our new Express application by installing Express. Type the ...

  10. 面试感悟----一名3年工作经验的程序员应该具备的技能 JAVA 必读书

    http://www.cnblogs.com/xrq730/p/5260294.html#3470685 http://www.cnblogs.com/xrq730/p/4994545.html