剑指Offer37 二叉树深度与平衡二叉树判断
- /*************************************************************************
- > 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 二叉树深度与平衡二叉树判断的更多相关文章
- 剑指Offer-37.二叉树的深度(C++/Java)
题目: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 递归求解左右子树的最大值即可,每遍历到一个结点,深度加1,最后 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- 剑指Offer——二叉树
剑指Offer--二叉树 前言 数据结构通常是编程面试中考察的重点.在参加面试之前,应聘者需要熟练掌握链表.树.栈.队列和哈希表等数据结构,以及它们的操作.本片博文主要讲解二叉树操作的相关知识,主要包 ...
- JS数据结构与算法 - 剑指offer二叉树算法题汇总
❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...
- 剑指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 ...
- 【剑指Offer】39、平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树.这里的定义是:如果某二叉树中任意结点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 解题思路: 首先对于本题我们要 ...
- 剑指offer 二叉树中和为某一个值的路径
剑指offer 牛客网 二叉树中和为某一个值的路径 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 15:53:58 2 ...
- 剑指offer 二叉树的层序遍历
剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...
- 剑指offer(39)平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目分析 第一种方法: 正常思路,应该会获得节点的左子树和右子树的高度,然后比较高度差是否小于1. 可是这样有一个问题,就是节点重复遍历了,影 ...
随机推荐
- 一个模拟"显示桌面.scf"程序的JS小函数
有时候我们或许有这样的一个需求,用JS模拟这样一个动作,同时按下组合快捷键:Windows旗帜键+D键,下面这个函数就可以帮到我们了. function f_ToggleDesktop() { var ...
- JavaScript谁动了你的代码
到目前为止,同学你知道了JavaScript的历史,也了解其"你想是啥就是啥"的变量系统.相信凭借你深厚的Java或者C++功底,再加上程序员特有的自傲气质,你肯定会信心满满:自信 ...
- 利用FlashPaper实现类似百度文库功能
最近需要实现一个类似百度文库的功能,在Google上淘了一段时间,发现FlashPaper还算能够不错的实现此需求. 首先讲下思路: 1>安装FlashPaper: 2>利用java代码将 ...
- 浅析WINFORM工具条的重用实现
一直以来,我都想看看别人家的工具栏重用(图1)到底是如何实现的,但在网上搜索了很久都没有找到过,即使找到一些程序,要么就是把这个工具栏写在具体的画面(图2),要么就是没有源代码的, 我在想,是否别人也 ...
- 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 ...
- OAB配置
OAB管理: http://blogs.technet.com/b/exchange_chs/archive/2013/01/31/exchange-server-2013-oab-managing- ...
- CSDN问答频道“华章杯”7月排行榜活动开始,丰厚奖品等你拿
CSDN问答频道月度排行榜,是CSDN问答频道从3月开始举办的活动,旨在鼓励更多用户参与提问和解答,创造一个良好的互帮互助氛围,使参与者在问和答的过程中得到技术水平的提升,也希望大家能在技术交流中结交 ...
- hdu 4597 Play Game 区间dp
Play Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=459 ...
- [Express] Level 1: First Step
Installing Express Let's start building our new Express application by installing Express. Type the ...
- 面试感悟----一名3年工作经验的程序员应该具备的技能 JAVA 必读书
http://www.cnblogs.com/xrq730/p/5260294.html#3470685 http://www.cnblogs.com/xrq730/p/4994545.html