文章目录概念代码的实现判断二叉树是否为平衡木

概念

所谓平衡树(Balance Tree,BT ),是指任意节点的子树的高度之差为1以下。

常见的是平衡树。

B树(多重平衡探索树) AVL树)二叉树)红黑树)自平衡二叉树探索树),由AVL树的特化代码实现从上到下判断一棵二叉树是否为平衡树)的DFS先行扫描)。

depth 函数计算当前节点cur的深度:

返回值:通过后续遍历实现深度计算。终止条件:空节点深度为0。isBalanced 函数实现判断:

返回值:(判断当前子树是否是平衡树,然后判断左右子树是否是平衡树(递归(根左右) )。终止条件:空节点当然是平衡树。/* * definitionforabinarytreenode.* struct treenode { * intval; * TreeNode *left; * TreeNode *right; *treenode(intx ) : val(x ) left ) null )、right ) {} * }; */class solution { int depth (treenode * cur ) }计算cur深度if (! cur )返回0; returnmax (深度(cur-right ),深度(cur-left ) ) 1; } public : boolisbalanced (treenode * root ) if ) root==nullptr ) return true; returnABS(depth(root-left )-depth (root-right )=1is balanced (root-left )-is balanced (root ) ); }; 自下而上的判断(DFS后序遍历) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

fun 函数实现后序遍历+剪枝:

3358www.Sina.com/cur左/右子树的深度之差1的情况:表示当前的子树还是平衡树,表示当前的子树的深度,即左/右子树的深度的最大值1(max(left ) ) 如果左/右子树的深度差为1,则返回-1。 它可以是其他负值,主要用于指示此子树不是平衡树,以便于后续修剪。 如果33558www.Sina.com/cur为空:返回到高度0,因为它指示越过了叶节点; 在左(右)子树的深度为1的情况下,表示该树的左)子树不是平衡树,能够进行剪枝,直接返回1;返回值:

终止条件:若fun(root )!=-1时,该树表示平衡,返回true; 否则就返回false。 class Solution { //稍后进行剪枝intfun(treenode*cur ) ) if (! cur )返回0; intleft=fun(cur-left ); if(left==-1 )返回- 1; //剪枝intright=fun(cur-right; if(right==-1 )返回- 1; //剪枝返回ABS (left-right ) 2? max(left,right )1 : -1; } public : boolisbalanced (treenode * root ) if ) root==nullptr ) return true; 返回函数(root )!=-1; };