判断一棵树是否为AVL树
来源:互联网 发布:right函数 vb 编辑:程序博客网 时间:2024/06/03 19:22
NO.12
判断一棵树是否为AVL树:
平衡二叉树(AVL树)是满足下面条件的二叉树:要么是一棵空树,要么左右子树都是AVL树,并且左右子树的深度之差的绝对值不大于1。由此可知,要判断一棵树是不是AVL树,只要判断它的左右子树的深度之差。问题落到了如何求一棵树的深度上去了。下面使用递归的方法求一棵树的深度:
#include<stdio.h> #include<math.h> #include<malloc.h> typedef struct BTree { int data; struct BTree *lchild,*rchild; }BTree,*Root; int isAVL(Root root) { if(!root) return TRUE; int ldepth=getDepth(root->lchild); int rdepth=getDepth(root->rchild); int abs_depth=abs(ldepth-rdepth); printf("ldepth=%d,rdepth=%d\n",ldepth,rdepth); return (abs_depth<=1)&&isAVL(root->lchild)&&isAVL(root->rchild); } int getDepth(Root root) { int ldepth,rdepth; if(!root) return 0; else { rdepth=getDepth(root->rchild); ldepth=getDepth(root->lchild); return (rdepth>ldepth)?(rdepth+1):(ldepth+1); } } Root createBTree(int arr[],int len,int i) { Root root; if(i>=len||(arr[i]==0)) return NULL; // printf("i=%d,len=%d,arr[i]=%d\n",i,len,arr[i]); root=(Root)malloc(sizeof(BTree)); root->data=arr[i]; root->lchild=createBTree(arr,len,2*i); root->rchild=createBTree(arr,len,2*i+1); return root; } void destroyBtree() { } int main(void) { int arr[]={0,1,2,3,4,0,0,0}; //int arr[]={0,1,2,0,4,0,0,0,8}; int i,depth; //Root root=createBTree(arr,9,1); Root root=createBTree(arr,8,1); // if(root) printf("ok\n"); printf("depth=%d",getDepth(root)); if(isAVL(root)) printf("是AVL树\n"); else printf("不是AVL树"); }
0 0
- 判断一棵树是否为AVL树
- 判断是否为AVL树~
- 判断一颗二叉树树是否为AVL树
- 剑指offer(41):判断二叉树是否为平衡二叉树(AVL树)
- 判断一颗二叉树是否为平衡二叉树(AVL)
- 判断一棵树是不是AVL树
- AVL树详解&面试题-判断一棵树是否是平衡二叉树
- 判断一个二叉树是否是平衡二叉树(AVL)
- 判断一个二叉树是否是AVL树
- 判断一棵树是否为完全二叉树
- cc150:判断一棵树是否为平衡树
- 判断一棵树是否为平衡二叉树
- 判断一棵树是否为完全二叉树
- 判断一棵树是否为二叉搜索树
- 判断一棵树是否为满二叉树
- 判断一棵树是否为平衡二叉树
- 判断一棵树是否为完全二叉树
- 判断一棵树是否为完全二叉树
- 采用dlopen、dlsym、dlclose加载动态链接库
- Linux下部署tomcat+mysql服务器
- B/S学习之路—JavaScript学习笔记—第二天&DOM
- 如何分析APP功能需求、结构
- AJAX开发初探
- 判断一棵树是否为AVL树
- Visual EmbedLinux Tools 更新到 0.1.7
- DICOM:DICOM3.0标准中文版开源书籍编辑之”github仓库合并“
- OOM详解
- 反转单链表
- Cocos2d-x 3.8.1 移植Android平台注意的细节问题
- 天声人語 20151010 さんま苦いか
- Andrew Ng机器学习课程17(1)
- spring与hibernate的整合问题—事务管理