剑指offer:平衡二叉树
题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路分析:
首先要明确平衡二叉树的定义。平衡二叉是左右子树的高度差小于等于1,且左右子树都为平衡二叉树。这里就存在一个递归判断左右子树是否为平衡二叉树的操作。可以根据之前求二叉树的高度问题来求解,首先求得当前树的左右子树高度,若满足高度差小于等于1,再进一步判断左右子树。
进一步优化以上的过程,考虑到每一次求二叉树树高度时,存在重复遍历树结点的问题。所以考虑将每个二叉树的高度存下来。
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int deepTree(TreeNode* pRoot)
{
if(pRoot==nullptr)
return ;
int count=;
if(pRoot->left==nullptr && pRoot->right==nullptr)
return count+;
count++;
return count+max(deepTree(pRoot->left), deepTree(pRoot->right));
}
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==nullptr)
return true;
int left = deepTree(pRoot->left);
int right = deepTree(pRoot->right);
if(left-right> || left-right<-)
return false;
else
{
return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));
}
}
};
优化代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth=;
return IsBalanced(pRoot,depth);
} bool IsBalanced(TreeNode* pRoot,int& depth){
if(pRoot==NULL){
depth=;
return true;
}
int left,right,diff;
if(IsBalanced(pRoot->left,left) && IsBalanced(pRoot->right,right)){
diff=left-right;
if(diff<= && diff>=-){
depth=left>right?left+:right+;
return true;
}
}
return false;
}
};
剑指offer:平衡二叉树的更多相关文章
- 剑指Offer——平衡二叉树
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质 ...
- 用java刷剑指offer(平衡二叉树)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 牛客网链接 java代码 import java.lang.Math; public class Solution { public bool ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- 【Java】 剑指offer(55-2) 平衡二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树 ...
- 《剑指offer(第二版)》面试题55——判断是否为平衡二叉树
一.题目大意 输入一颗二叉树,判断该二叉树是否为平衡二叉树(AVL树). 二.题解 <剑指offer>上给出了两种解决方式: 1.第一种是从根节点开始,从上往下遍历每个子节点并计算以子节点 ...
- Go语言实现:【剑指offer】平衡二叉树
该题目来源于牛客网<剑指offer>专题. 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. ...
- 剑指 Offer 55 - II. 平衡二叉树 + 平衡二叉树(AVL)的判断
剑指 Offer 55 - II. 平衡二叉树 Offer_55_2 题目描述 方法一:使用后序遍历+边遍历边判断 package com.walegarrett.offer; /** * @Auth ...
- 力扣 - 剑指 Offer 55 - II. 平衡二叉树
题目 剑指 Offer 55 - II. 平衡二叉树 思路1(后序遍历+剪枝) 这题是上一题剑指 Offer 55 - I. 二叉树的深度的进阶,逻辑代码和那个一样,也是后续遍历,获取两个子节点较大的 ...
- 《剑指offer》平衡二叉树
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
随机推荐
- JavaScript之控制标签属性
var pic=document.getElementById('pic'); var obtn=document.getElementById('btn'); console.log(pic.get ...
- Java 之 request 案例——用户登录
用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,db1数据库中user表 3. ...
- 英语DYAMAUND钻石DYAMAUND单词
dyamaund and the English words dyamaund The Vertu of the Dyamaund": Gemstones, Knowledge and Va ...
- unity 用LineRender画四边形并测面积
作为一个菜鸡,这个高中数学题差不多废了我两个上午...好了,废话不多说,直接上代码... using System.Collections.Generic; using UnityEngine; pu ...
- Java开发环境之Redis
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 陆章:Redis安装教程 1)去Github上下载安装包 https://github.com/MSOpenTech/re ...
- 24.centos7基础学习与积累-010-上机考核命令练习
从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 1.创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然 ...
- Codeforces G. Bus Number(dfs排列)
题目描述: Bus Number time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- steam游戏存档迁移
之前玩的盗版guacamelee等着打折入正,今天入了,不想重新打了,就把存档从盗版迁移了一下. 盗版的目录是F:\Guacamelee\Profile\ALI213\Saves,该目录下又一个SAV ...
- 树莓派 Linux 系统命令行快捷键
刚入门树莓派时,在 Linux 下使用命令操作的时候,光标的移动令人头痛.命令输入完了,执行之后发现缺少权限,然后不得不移动光标到行首加 sudo,而命令又极长……当我学会了命令行相关的快捷键之后,不 ...
- 软帝学院教你java命名规范法则
java命名规范法则大全 在我们在刚开始学习java的时候,给包.类.方法等命名的时候总是取名不规范,大多都是随便取的,对于一个专业的程序员来说.命名规范化也是必不可少的.命名规范的话能够在编码过程中 ...