算法题-平衡二叉树

Posted IT界的泥石流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题-平衡二叉树相关的知识,希望对你有一定的参考价值。




一棵树是否为平衡二叉树

题目


判断一棵树是否是平衡二叉树

平衡二叉树


平衡二叉树的提出就是为了保证树不至于太倾斜,尽量保证两边平衡。因此它的定义如下:

(1) 平衡二叉树要么是一棵空树

(2) 要么保证左右子树的高度之差不大于 1子树也必须是一颗平衡二叉树

也就是说,树的两个左子树的高度差别不会太大。

他的应用极为广泛,其中包括AVL树、红黑树、SB树(Size Balanced Tree,它是一种平衡二叉查找树。它的论文由中国广东中山纪念中学的陈启峰于2006年底完成,并在Winter Camp 2007中发表。由于SBT的拼写很容易找到中文谐音,它常被中国的OIer们戏称为 “傻B树)。它们都是具有某一种平衡性的搜索二叉树,接下来我们说一下如何判断一棵树是否具有平衡性,即一棵树或者它的子树中的左右子树的高度差不超过1。


如何判断?

其思路非常清晰和简单,首先从根节点开始,先判断左右子树的高度差是否超过1,然后接着判断左右子树是否是平衡二叉树。这是一种从底到顶的递归思路,把从低到高的高度逐层往上返回,如果遇到某一棵子树不为平衡树,则一路往上返回false,如何是子树为平衡术,则返回true以及这棵子树的高度。



代码


 public static class ReturnType { public int level; public boolean isB;  public ReturnType(int l, boolean is) { level = l; isB = is; } }  // process(head, 1)  public static ReturnType process(Node head, int level) { if (head == null) { return new ReturnType(level, true); } ReturnType leftSubTreeInfo = process(head.left, level + 1); if(!leftSubTreeInfo.isB) { return new ReturnType(level, false); } ReturnType rightSubTreeInfo = process(head.right, level + 1); if(!rightSubTreeInfo.isB) { return new ReturnType(level, false); } if (Math.abs(rightSubTreeInfo.level - leftSubTreeInfo.level) > 1) { return new ReturnType(level, false); } return new ReturnType(Math.max(leftSubTreeInfo.level, rightSubTreeInfo.level), true); }


下期题目

判断一棵二叉树是否是完全二叉树,欢迎留言提供思路。











以上是关于算法题-平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章

每日算法题 | 剑指offer 二叉树专题 (16) 平衡二叉树

⭐算法入门⭐《二叉树 - 平衡二叉树》简单01 —— LeetCode 110. 平衡二叉树

LeetCode Java刷题笔记—110. 平衡二叉树

求数据结构算法平衡二叉树实现代码

LeetCode第110题—平衡二叉树—Python实现

数据结构与算法二叉树——平衡二叉树