题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵二叉树。
        我们很容易就能想到一个代码简洁却性能不佳的思路:在遍历树的每个结点的时候,调用函数TreeDpth得到它的左右子树的深度。如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二又树。

较好的思路是:用后序遍历的方式遍历整棵二叉树。在遍历某结点的左右子结点之后,我们可以根据它的左右子结点的深度判断它是不是平衡的,并得到当前结点的深度。当最后遍历到树的根结点的时候,也就判断了整棵一几叉树是不是平衡一叉树。这种方案每个结点只需遍历一次。

struct BinaryTreeNode{int m_nValue;BinaryTreeNode *m_pLeft;BinaryTreeNode *m_pRight;
};
bool IsBalanced(BinaryTreeNode *pRoot, int *depth)
{if (pRoot==NULL){*depth=0;return true;}//中间变量,记录左右子树的深度int left,right;if (IsBalanced(pRoot->m_pLeft,&left)&&IsBalanced(pRoot->m_pRight,&right)){//深度差int Dif=left-right;if (Dif<=1&&Dif>=-1){*depth=1+(left>right?left:right);return true;}}return false;
}//判断是否是平衡二叉树
bool IsBalanced(BinaryTreeNode *pRoot)
{int depth=0;return IsBalanced(pRoot,&depth);
}

判断二叉树是不是平衡二叉树相关推荐

  1. 剑指offer之判断二叉树是不是平衡二叉树

    1 问题 判断二叉树是不是平衡二叉树 平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右 ...

  2. 判断二叉树是否平衡二叉树

    题目 平衡二叉树的性质为:要么是一颗空树,要么任何一个节点的左右子树高度差的绝对值不超过1.给定一棵二叉树的头结点head,判断这棵二叉树是否为平衡二叉树. 难度:? 基础理解 以下是个人认为对概念叙 ...

  3. python判断二叉树是否为平衡二叉树

    python判断二叉树是否为平衡二叉树 树是数据结构中的重中之重,尤其以各类二叉树为学习的难点.一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列.在学习与总结的同时更加 ...

  4. 判断二叉树是否为平衡二叉树

    题目:判断二叉树是否为平衡二叉树 思路:迭代,需要借助二叉树的高度,判断一个树是否为平衡二叉树,则判断其左子树和右子树是否为平衡二叉树 public static boolean isAVLRec(T ...

  5. 左神算法:判断二叉树是否为平衡二叉树(树形dp套路,Java版)

    本题来自左神<程序员代码面试指南>"判断二叉树是否为平衡二叉树"题目. 题目 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1. ...

  6. 判断二叉树是否是平衡二叉树

    平衡二叉树(Balanced Binary Tree)又被称为AVL树:且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树. 主要实现思路: ...

  7. 判断是否是平衡二叉树,满二叉树, 完全二叉树

    定义一个二叉树 #include <stack> #include <queue> #include <unordered_map> #include <un ...

  8. C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)

    目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...

  9. 带父节点的平衡二叉树_学习数据结构--第四章:树与二叉树(平衡二叉树)

    第四章:树与二叉树(平衡二叉树) 1.平衡二叉树 平衡二叉树:AVL,任意结点的平衡因子的绝对值不超过一. 平衡因子:左子树高度 - 右子树高度 如上图二叉树,是否是平衡二叉树? 可以把所有结点的平衡 ...

最新文章

  1. face detection[PyramidBox]
  2. 3.2-3.3 Hive中常见的数据压缩
  3. Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态
  4. 以太坊“拿下”世界银行(WB)!7300万美元债券将在下周完成结算
  5. 基于脆弱水印的图像篡改检测实现
  6. ALV 简单实现HTML抬头的方法 (介绍 一)
  7. (全排列)Smallest Difference (poj2718)
  8. Microsoft Edge 81 稳定版发布
  9. php 许愿墙 阶段案例_文化墙制作要突出企业哪些重点?
  10. cstring::replace不区分大小写_Excel VBA之函数篇-3.11订单号千奇百怪,如何按照结构区分来源...
  11. 你写过哪些原创的风骨傲气,热血沸腾的句子?
  12. 190425每日一句
  13. PPT 插入表格出现格式如何清除
  14. Java数组、集合、散列表常见算法浅析
  15. rust相框加载图片代码_用代码为相片加相框的方法
  16. 金融学python应该学哪些知识_哪些Python基础知识必学
  17. Pdf 转 word 和 word 转 pdf 等
  18. IJCAI 2022 | 量化交易相关论文(附论文链接)
  19. 装修公司选择Tips
  20. chrome设置默认首页无效

热门文章

  1. mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...
  2. [Android] Android 锁屏实现与总结 (一)
  3. python实现JWT
  4. PAT 1018 锤子剪刀布
  5. [WC2007] 剪刀石头布
  6. 了解Java密码扩展的基础
  7. JavaScript 笔记2
  8. [转载] python面向对象编程实例
  9. [转载] api地理编码_通过地理编码API使您的数据更有意义
  10. [转载] Python——函数练习(包括简单递归)