1. 程式人生 > >判斷一顆二叉樹樹是否為AVL樹

判斷一顆二叉樹樹是否為AVL樹

1)先判斷該樹是否為二叉排序樹,也可以採用中序遍歷該樹,判斷是否有序

2)判斷該樹是否為平衡樹

程式碼如下:

struct TreeNode
{
    struct TreeNode *left;
    struct TreeNode *right;
    int key;
};
//這裡先判斷是否為二叉搜尋樹,其次判斷是否為平衡的
bool IsAVL(TreeNode *root,int depth)
{
    if (isBST(root)&&isBalance(root,&depth))
    return true;
    return false;
}

//判斷是否為二叉搜尋樹 bool isBST(TreeNode *root) { if(root == NULL)return true; if (!isBST(root->left))return false; if (!isBST(root->right))return false; TreeNode *cur = root->left; if (cur != NULL) { while(cur->right!=NULL)cur = cur->right; if(root->key < cur->key)return
false; } TreeNode *cur = root->right; if (cur != NULL) { while(cur->left!=NULL)cur = cur->left; if(root->key > cur->key)return false; } return true; } //判斷是否平衡 bool isBalance(TreeNode *root,int *depth) { if (root == NULL) { *depth = 0
; return true; } int depthl,depthr; if(!isBalance(root->left,&depthl))return false; if(!isBalance(root->right,&depthr))return false; int diff = depthl - depthr; if(diff > 1 || diff < -1)return false; *depth = 1+(depthl>depthr?depthl:depthr); return true; }
轉載地址:http://www.cnblogs.com/newpanderking/p/3969557.html