《剑指offer》刷题笔记(知识迁移能力):平衡二叉树
来源:互联网 发布:java反射之getmethod 编辑:程序博客网 时间:2024/05/18 01:41
《剑指offer》刷题笔记(知识迁移能力):平衡二叉树
- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer
- 刷题平台:https://www.nowcoder.com/
- 题 库:剑指offer
- 编 者:WordZzzz
- 剑指offer刷题笔记知识迁移能力平衡二叉树
- 题目描述
- 解题思路
- C版代码实现
- 多次遍历
- 一次遍历
- Python版代码实现
- 多次遍历
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题思路
可以在之前求二叉树深度的基础上进行算法实现,但是需要多次遍历。我们也可以用后序遍历,这样我们只需要遍历一次即可,需要需要存储一下左右子树的深度。
C++版代码实现
多次遍历
class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot == NULL) return true; int left = getDepth(pRoot->left); int right = getDepth(pRoot->right); int diff = left - right; if(diff > 1 || diff < -1) return false; return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right); } int getDepth(TreeNode* pRoot){ return pRoot ? max(getDepth(pRoot->left),getDepth(pRoot->right))+1 :0; }};
一次遍历
class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { int depth = 0; return IsBalanced(pRoot, &depth); } int IsBalanced(TreeNode* pRoot, int* depth){ if(pRoot == NULL){ *depth = 0; return true; } int left, right; if(IsBalanced(pRoot->left, &left) && IsBalanced(pRoot->right, &right)){ int diff = left - right; if(diff <= 1 && diff >= -1){ *depth = 1 + (left > right ? left : right); return true; } } return false; }};
Python版代码实现
多次遍历
# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def IsBalanced_Solution(self, pRoot): # write code here if pRoot == None: return True left = self.getDepth(pRoot.left) right = self.getDepth(pRoot.right) diff = abs(left - right) if diff > 1: return False return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right) def getDepth(self, pRoot): if not pRoot: return 0 return max(self.getDepth(pRoot.left),self.getDepth(pRoot.right))+1
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz
阅读全文
0 0
- 《剑指offer》刷题笔记(知识迁移能力):平衡二叉树
- 平衡二叉树(剑指offer)知识迁移能力
- 《剑指offer》刷题笔记(知识迁移能力):二叉树的深度
- 剑指offer 6.3 知识迁移能力3- 判断二叉树是否是平衡二叉树
- 《剑指offer》刷题笔记(知识迁移能力):数组中只出现一次的数字
- 《剑指offer》刷题笔记(知识迁移能力):和为S的两个数字
- 《剑指offer》刷题笔记(知识迁移能力):和为S的连续正数序列
- 《剑指offer》刷题笔记(知识迁移能力):翻转单词顺序列
- 《剑指offer》刷题笔记(知识迁移能力):左旋转字符串
- 剑指offer 39题 【知识迁移能力】二叉树的深度
- 剑指offer 算法 (知识迁移能力)
- 《剑指offer》刷题笔记(知识迁移能力):数字在排序数组中出现的次数
- 剑指offer 6.3 知识迁移能力2- 二叉树的深度
- 【剑指offer】6.3知识迁移能力——面试题39:二叉树的深度
- 剑指offer 42题 【知识迁移能力】左旋转字符串
- 剑指offer 算法 (知识迁移能力2)
- 知识迁移能力-二叉树的深度
- 【剑指offer】题39:平衡二叉树
- 字符串函数reverse()的用法
- 2 个月从零开始入门 AI ,我是如何做到的?
- Eclipse/Myeclipse 中字符编码设置修改
- Linux 系统 安装 phpMyAdmin
- 留档正向代理和反向代理
- 《剑指offer》刷题笔记(知识迁移能力):平衡二叉树
- Tensorflow object detection API 源码阅读笔记:基本类(1)
- 063day(快速排序和分治例题)
- python量化分系列之---使用tushare获取股票实时分笔数据延时有多大
- IT的道德与伦理
- org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.ap
- 在自定义控件中启动一个活动时出现的undefin的错误问题
- 学编程需要注意什么?
- 怎么通过反卷积生成和原始图像一样大小的图像? | 社区问答