/*************************************************************************
> File Name: 37_TreeDepth.cpp
> Author: Juntaran
> Mail: JuntaranMail@gmail.com
> Created Time: 2016年09月03日 星期六 09时49分38秒
************************************************************************/ #include <stdio.h>
#include <malloc.h>
#include <math.h> // 二叉树结构体
struct BinaryTree
{
int val;
struct BinaryTree* left;
struct BinaryTree* right;
}; BinaryTree* createTree()
{
BinaryTree* root = (BinaryTree*)malloc(sizeof(BinaryTree));
root->val = ;
root->left = (BinaryTree*)malloc(sizeof(BinaryTree));
root->left->val = ;
root->right = (BinaryTree*)malloc(sizeof(BinaryTree));
root->right->val = ;
root->left->left = (BinaryTree*)malloc(sizeof(BinaryTree));
root->left->left->val = ;
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = (BinaryTree*)malloc(sizeof(BinaryTree));
root->left->right->val = ;
root->left->right->right = NULL;
root->left->right->left = (BinaryTree*)malloc(sizeof(BinaryTree));
root->left->right->left->val = ;
root->left->right->left->left = NULL;
root->left->right->left->right = NULL;
root->right->right = (BinaryTree*)malloc(sizeof(BinaryTree));
root->right->right->val = ;
root->right->left = NULL;
root->right->right->left = NULL;
root->right->right->right = NULL;
// root->right->right->right = (BinaryTree*)malloc(sizeof(BinaryTree));
// root->right->right->right->val = 8;
// root->right->right->right->left = root->right->right->right->right = NULL; return root;
} // 二叉树中序遍历
void InOrder(BinaryTree* root)
{
if (root == NULL)
return; InOrder(root->left);
printf("%d ", root->val);
InOrder(root->right);
} // 二叉树的深度
int TreeDepth(BinaryTree* root)
{
if (root == NULL)
return ; int left = TreeDepth(root->left);
int right = TreeDepth(root->right); return (left>right) ? (left+) : (right+);
} // 判断一棵树是不是平衡二叉树
bool isBalanced(BinaryTree* root)
{
if (root == NULL)
return true; int left = TreeDepth(root->left);
int right = TreeDepth(root->right); int diff = abs(left - right);
if (diff > )
return false; return isBalanced(root->left) && isBalanced(root->right);
} // 后序遍历方法
bool isBalanced2(BinaryTree* root, int* depth)
{
if (root == NULL)
{
*depth = ;
return true;
}
int left, right;
if (isBalanced2(root->left, &left) && isBalanced2(root->right, &right))
{
int diff = abs(left - right);
if (diff <= )
{
*depth = + (left>right ? left : right);
return true;
}
}
return false;
} bool isBalanced2(BinaryTree* root)
{
int depth = ;
return isBalanced2(root, &depth);
} int main()
{
BinaryTree* test = createTree();
InOrder(test);
int depth = TreeDepth(test);
printf("\ndepth is %d\n", depth);
if (isBalanced2(test) == true)
printf("Balance\n");
else
printf("No Balance\n"); }

剑指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. uva 558 - Wormholes(Bellman Ford判断负环)

    题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...

  2. CSS line-height 和 vertical-align 精解(上篇)

    声明本文转自:http://hi.baidu.com/wolongxzg/item/a39ef8299c984283af48f5b0 line-height属性的具体定义列表如下: 语法: line- ...

  3. android Notification和NotificationManager的使用

    Notification和NotificationManager 1.Broadcast Receiver组件没有提供可视化的界面来显示广播信息.这里我们可以使用Notification和Notifi ...

  4. Oracle 建表常用数据类型的详解

    创建表时,必须为表的各个列指定数据类型.如果实际的数据与该列的数据类型不相匹配,则数据库会拒绝保存.如为学生指定出生日期为“1980-13-31”. 在Oracle中,常见的数据类型有: 字符串:字符 ...

  5. uva387 - A Puzzling Problem

    A Puzzling Problem The goal of this problem is to write a program which will take from 1 to 5 puzzle ...

  6. li中包含span,在IE6、IE7下会有3pxbug

    如果给每个li里面加个span标签的话,在IE6,IE7下看,li与li之间的距离就会多了3px. 解决方法:在li中加vertical-align:middle; <div class=&qu ...

  7. ZooKeeper是什么?

    What is ZooKeeper? (译:什么是ZooKeeper?) ZooKeeper is a centralized service for maintaining configuratio ...

  8. MiinCMP1.0 SAE 新浪云版公布, 开源企业站点系统

    MiinCMP是一款开源企业站点系统,除可执行于256M左右100元的国内IDC外,JUULUU聚龙软件团队最近开发了面向新浪云的版本号,该版本号可将站点免费布署到新浪云SAE上.MiinCMP採用j ...

  9. HDU 5597 GTW likes function 打表

    GTW likes function 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Now you are give ...

  10. 一步步学Mybatis-实现单表情况下的CRUD操作 (3)

    今天这一章要紧接上一讲中的东西,本章中创建基于单表操作的CRUD与GetList操作,此示例中以Visitor表为范例,为了创建一点测试数据我们先弄个Add方法吧 继续在上次的IVisitorOper ...