高度平衡的二叉树
2017-01-08 22:19
375 查看
/**
* 题目
* 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:
* 一棵二叉树中每个节点的两个子树的深度相差不会超过1。
* 例二叉树:先序 3 9 # # 2 1 # # 7 # # 是平衡二叉树
* 先序 3 # 2 1 # # 7 # # 不是平衡二叉树
* 分析:
* 首先求深度,然后判断深度相差是否超过1,注意递归的使用
*/
* 题目
* 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:
* 一棵二叉树中每个节点的两个子树的深度相差不会超过1。
* 例二叉树:先序 3 9 # # 2 1 # # 7 # # 是平衡二叉树
* 先序 3 # 2 1 # # 7 # # 不是平衡二叉树
* 分析:
* 首先求深度,然后判断深度相差是否超过1,注意递归的使用
*/
import java.util.Scanner; public class n6BalenceTree { public static void main(String[] args) { // TODO Auto-generated method stub TreeNode treeNode=createTree(); PreTraverse(treeNode); System.out.println(isBalenced(treeNode)); } //判断是否平衡 public static boolean isBalenced(TreeNode root){ if(root==null) return true; int left=depth(root.left); int right=depth(root.right); if(Math.abs(left-right)<=1){ return isBalenced(root.left)&&isBalenced(root.right); }else return false; } //计算深度 public static int depth(TreeNode root){ if(root==null){ return 0; } int left=depth(root.left); int right=depth(root.right); return Math.max(left, right)+1; } //用先序递归建数 public static TreeNode createTree(){ Scanner input=new Scanner(System.in); String str=input.nextLine();// 输入一个数字 TreeNode node=null; if(isNum(str)){//判断是否是数字,则用这个数字为根创建一个结点 node=new TreeNode(Integer.valueOf(str).intValue()); node.left=createTree(); node.right=createTree(); return node; } return node; } //先序遍历 public static void PreTraverse(TreeNode root){ if(root!=null){ System.out.printf("%4d",root.val); PreTraverse(root.left); PreTraverse(root.right); }else{ System.out.printf("%2c",'#'); } } public static boolean isNum(String str){ return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?([.]([0-9]+))?)$"); } }
相关文章推荐
- c++ AVLTree(高度平衡的搜索二叉树)
- 高度平衡的二叉树——AVLTree
- 判断二叉树是否平衡,计算树的高度
- Balanced Binary Tree 判断二叉树是否是高度相差不超过1的高度平衡的二叉树
- AVL(高度平衡的二叉树)
- 【剑指offer】判断二叉树是否平衡(左右子树高度差最多为1)
- 二叉树问题---通过有序数组生成平衡搜索二叉树
- Chapter 4 | Trees and Graphs--有序数组构建最小高度的二叉树
- 判断二叉树是否平衡
- 求二叉树的高度、结点数和叶结点数
- 给定一个有序数组(递增),构建一棵具有最小高度的二叉树
- 程序员面试题精选100题(60)-判断二叉树是不是平衡
- 求二叉树的高度(深度+1)
- [LeetCode] 从排序的单链表到平衡搜索二叉树
- 平衡有序二叉树(AVL Tree)的C++实现
- 求二叉树的前中后序递归、迭代,树的叶子节点,高度(c语言)
- 判断是否是子树 和 判断二叉树是否平衡
- 二叉树的操作3非递归算法求二叉树的高度
- 二叉树的三大遍历与求高度和结点
- 二叉树非递归遍历、层次遍历、高度、节点数