首页 > 代码库 > 判断一棵二叉树是否为AVL树
判断一棵二叉树是否为AVL树
思路:AVL树是高度平衡的二叉搜索树,这里为了清晰说明,分别判断是否为搜索树,是否为平衡树。
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;}
判断一棵二叉树是否为AVL树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。