1.判断二叉树是否平衡
解法1:
int treeDepth(Node *root){
if(root == NULL)
return 0;
int ld = treeDepth(root->left);
int rd = treeDepth(root->right);
return ld > rd ? ld + 1 : rd + 1;
}
bool isBalanced(Node *root){
if(root == NULL)
return true;
int leftDepth = treeDepth(root->left);
int rightDepth = treeDepth(root->right);
if(abs(leftDepth - rightDepth) > 1)
return false;
else
return isBalanced(root->left) && isBalanced(root->right);
}
解法2:
bool isBalancedCore(Node *root, int *depth);
bool isBalanced(Node *root){
int depth = 0;
return isBalancedCore(root, &depth);
}
bool isBalancedCore(Node *root, int *depth){
if(root == NULL){
*depth = 0;
return true;
}
int left, right;
if(isBalancedCore(root->left, &left) && isBalancedCore(root->right, &right)){
int diff = left - right;
if(diff <= 1 && diff >= -1){
*depth = 1 + (left > right ? left : right);
return true;
}
}
return false;
}
2.判断二叉树是否完全二叉树
采用层序遍历
bool isCompleteTree(Node *root){
queue<Node*> q;
q.push(root);
while(q.front() != NULL){
Node *ptr = q.front();
q.pop();
q.push(ptr->left);
q.push(ptr->right);
}
while(!q.empty()){
if(q.front() != NULL)
return false;
q.pop();
}
return true;
}
3..判断二叉树是否二叉排序树
bool isBST(Node *root){
if(root == NULL)
return true;
queue<Node*> q;
q.push(root);
while(!q.empty()){
Node *ptr = q.front();
q.pop();
if(ptr->left){
if(ptr->data < ptr->left->data)
return false;
else q.push(ptr->left);
}
if(p->right){
if(p->data > p->right->data)
return false;
else
q.push(ptr->right);
}
}
return true;
}