二叉树基础题(三)
来源:互联网 发布:ios视频制作软件 编辑:程序博客网 时间:2024/05/16 04:59
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/69788107冷血之心的博客)
二叉树是在面试中经常被问到的,这里总结下二叉树的常用操作。
包括:
- 判断两棵二叉树是否相同的树:isCompleteBinaryTree(迭代)
- 判断二叉树是不是平衡二叉树 递归解法:isAVLRec(递归)
10、判断两棵二叉树是否相同的树
/** 判断二叉树是不是完全二叉树(迭代) 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数, 第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 有如下算法,按层次(从上到下,从左到右)遍历二叉树,当遇到一个节点的左子树为空时, 则该节点右子树必须为空,且后面遍历的节点左右子树都必须为空,否则不是完全二叉树。 */ public static Boolean isCompleteBinaryTree(TreeNode root) { if(root==null) return false; // 使用一个队列,将节点依次放入取出 Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); // 设置一个标志位 Boolean flag = false; while(!queue.isEmpty()){ // 取出一个节点 TreeNode cur = queue.remove(); if(flag){ // 已经出现了有空子树的节点了,后面出现的必须为叶节点(左右子树都为空) if(cur.left!=null||cur.right!=null){ return false; } }else {if(cur.left!=null&&cur.right!=null){ // 如果左子树和右子树都非空,则继续遍历 queue.add(cur.left);queue.add(cur.right);}else if(cur.left!=null&&cur.right==null){ // 如果左子树非空但右子树为空,说明已经出现空节点,之后必须都为空子树 queue.add(cur.left);flag = true;}else if(cur.left==null&&cur.right==null){ // 如果左右子树都为空,则后面的必须也都为空子树flag = true;}else if(cur.left==null&&cur.right!=null){ // 如果左子树为空但右子树非空,说明这棵树已经不是完全二叉完全树!return false;}} }return true;}
11、判断二叉树是不是平衡二叉树
/** * 判断二叉树是不是平衡二叉树 递归解法: * (1)如果二叉树为空,返回真 * (2)如果二叉树不为空,如果左子树和右子树都是AVL树并且左子树和右子树高度相差不大于1,返回真,其他返回假 */ public static Boolean isAVLRec(TreeNode root){ if(root==null) return false; // 如果左子树和右子树高度相差大于1,则非平衡二叉树, getDepthRec()是前面实现过的求树高度的方法 if(Math.abs(getDepth(root.left)-getDepth(root.right))>1){ return false; } // 递归判断左子树和右子树是否为平衡二叉树 return isAVLRec(root.left)&&isAVLRec(root.right); }
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
1 0
- 二叉树基础题(三)
- 基础算法(三)---二叉树搜索(Java)
- 数据结构之二叉树基础三
- 二叉树(三)
- 二叉树(三)
- 二叉树基础题(一)
- 二叉树基础题(二)
- LeetCode二叉树基础题(不断更新)
- 二叉查找树(三)
- 二叉树面试(三)
- 二叉树整理(三)
- 常见算法基础题思路简析(三)-二叉树篇
- 树和二叉树(三)-线索二叉树
- java 二叉树(三)递归遍历二叉树
- 二叉树学习(三):二叉树遍历
- 二叉树的建立和基础操作<三> —— (三种遍历及分层打印)
- Java基础 - 排序二叉树(二叉查找树)
- 二叉树相关笔试题(三)
- C++之函数模版和类模版
- PostGIS,ArcSDE For PostgreSQL,ArcEngine的关系与结合
- tushare 股票分类数据
- python 编码 乱码问题
- memset赋值0和-1,还能赋其他值吗?
- 二叉树基础题(三)
- 树莓派+RC522模块
- 4月8日,DemogetProperties,每日20行。
- FreeCodeCamp学习--Where do I belong
- 博主github项目分享
- 震动传感器设计
- 服务发现
- The Galactic Olympics ///dp
- Centos7修改ssh端口