【IT笔试面试题整理】判断一个二叉树是否是平衡的?
来源:互联网 发布:python视频教程在线 编辑:程序博客网 时间:2024/05/22 03:47
【试题描述】定义一个函数,输入一个链表,判断链表是否存在环路
平衡二叉树,又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。
问题:判断一个二叉排序树是否是平衡二叉树这里是二叉排序树的定义解决方案:根据平衡二叉树的定义,如果任意节点的左右子树的深度相差不超过1,那这棵树就是平衡二叉树。首先编写一个计算二叉树深度的函数,利用递归实现。
【参考代码】
方法一:
1 //返回树的最大深度 2 public static int Depth(Node root) 3 { 4 if (root == null) 5 return 0; 6 else 7 { 8 int ld = Depth(root.left); 9 int rd = Depth(root.right);10 return 1 + (ld > rd ? ld : rd);11 }12 }13 14 public static boolean isBalanced(Node root)15 {16 if(root == null)17 return true;18 int dis = Depth(root.left) - Depth(root.right);19 if(dis >1 || dis < -1)20 return false;21 else22 return isBalanced(root.left) && isBalanced(root.right);23 }
方法二:
1 public static boolean isBalanced(Node root){ 2 return (maxDepth(root) - minDepth(root) <=1); 3 } 4 private static int minDepth(Node root) 5 { 6 if(root == null) 7 return 0; 8 return 1 + Math.min(minDepth(root.left), minDepth(root.right)); 9 }10 private static int maxDepth(Node root)11 {12 if(root == null)13 return 0;14 return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));15 }
阅读全文
0 0
- 【IT笔试面试题整理】判断一个二叉树是否是平衡的?
- 【IT笔试面试题整理】判断一个树是否是另一个的子树
- 【IT笔试面试题整理】判定一棵二叉树是否是二叉搜索树-转
- 面试题39:获得二叉树深度和判断是否是平衡二叉树
- 数据结构面试题/判断一棵二叉树是否是平衡二叉树
- 面试题09 从二叉树的深度扩展到判断是否是二叉平衡树 【树】 Dserving thinking
- leetcode的判断一个二叉树是否是平衡树
- 如何判断一个二叉树是否是平衡的?
- AVL树详解&面试题-判断一棵树是否是平衡二叉树
- 面试题——判断一棵树是否是平衡二叉树
- [各种面试题] 判断是否平衡二叉树
- 面试题39(2). 判断是否为平衡二叉树
- 判断一个二叉树是否是平衡二叉树
- 判断一个二叉树是否是平衡二叉树
- 判断一个二叉树是否是平衡二叉树(AVL)
- 判断一个二叉树是否是平衡二叉树
- 【IT笔试面试题整理】给定二叉树,给每层生成一个链表
- 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
- 20171215Capstone培训班
- 【IT笔试面试题整理】反转链表
- 【IT笔试面试题整理】字符串转数组+数组转字符串
- 【IT笔试面试题整理】判断链表是否存在环路,并找出回路起点
- 【IT笔试面试题整理】判断一个二叉树是否是平衡的?
- 关于笔记本安装Deepin 或者ubuntu操作系统,无法进入界面。
- 【IT笔试面试题整理】删除无序链表中重复的节点
- 如何配置MySQL数据库超时设置
- 【IT笔试面试题整理】判断一个树是否是另一个的子树
- 【IT笔试面试题整理】有序数组生成最小高度二叉树
- 【IT笔试面试题整理】给定二叉树,给每层生成一个链表
- XSS漏洞手工检测
- 【IT笔试面试题整理】位操作