题目:写一个算法,统计二叉树中不平衡结点树的个数。若一个树的左子树高度和右子树高度之差的绝对值大于1,则表明该节点为不平衡结点。
一般写法:
/*题目:写一个算法,统计二叉树中不平衡结点树的个数。
若一个树的左子树高度和右子树高度之差的绝对值大于1,
则表明该节点为不平衡结点。*/
#include <iostream>
#include <algorithm>
using namespace std;
int sum = 0; //统计不平衡结点个数
int getHeight(node *bt) {
if(bt == NULL) return 0; //二叉树为空,树的高度为0
else { //递归求当前节点高度:当前结点高度height=max(heightleft, heightright)+1
int heightleft = getHeight(bt->left);
int heightright = getHeight(bt->right);
if(heightleft-heightright>1 || heightleft-heightright<-1){//左子树高度和右子树高度之差的绝对值大于1
sum++;
}
}
return max(heightleft, heightright)+1;
}
求一棵二叉树的深度更简洁的写法:
int getHeight(node *root) {
return root==NULL ? 0 : max(getHeight(root->left), getHeight(root->right)) + 1
}