二叉树基础题(三)
2017-04-08 22:15
253 查看
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/69788107冷血之心的博客)
二叉树是在面试中经常被问到的,这里总结下二叉树的常用操作。包括:
判断两棵二叉树是否相同的树:isCompleteBinaryTree(迭代)
判断二叉树是不是平衡二叉树 递归解法:isAVLRec(递归)
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
二叉树是在面试中经常被问到的,这里总结下二叉树的常用操作。包括:
判断两棵二叉树是否相同的树: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一起交流学习哦~
相关文章推荐
- 经典计算机基础数据结构:二叉树
- 基础算法学习(二)_二叉树及应用赫夫曼编码
- [算法]二叉树基础与二叉查找树与堆
- 数据结构基础练习-二叉树的镜像
- 【数据结构】第4周 二叉树基础
- 【数据结构】- 二叉树基础操作
- .net 数据结构与算法基础:二叉树
- 算法基础---数据结构---树和二叉树
- 二叉树遍历Java之美[从菜鸟到高手演变]之数据结构基础之树、二叉树
- 二叉树的一些基础算法
- 一步一步复习数据结构和算法基础-层次建立层次遍历二叉树
- 基础题练习——二叉树中和为某一值的路径
- BiTree 二叉树 基础算法及常见题目总结
- 二叉树问题汇总(1)—基础问题
- 二叉树的一些基础算法
- 二叉树 基础 笔记
- 一步一步复习数据结构和算法基础-二叉树基本操作
- 二叉树的基础问题
- Java基础之一组有用的类——使用二叉树搜索算法搜索某个作者(TryBinarySearch)
- Java之美[从菜鸟到高手演变]之数据结构基础之树、二叉树